我想要一个Action事件(on=")在转换到新路由时触发。
我已经看到了Action事件处理程序的列表,我能找到的最接近的是将动作附加到页面上最大的HTML元素上,并用'Mousemove '触发它。这是我想要做的一件有严重缺陷的事情。
把它画出来。
<div {{action 'displayEitherHtml1or2'}} class="largestDOMelement">
{{#if showHtml1}}
// html 1 inside
{{/if}}
{{#if showHtml2}}
// html 2 inside
{{/if}}
</div>
'/objects'是一个对象列表,点击其中一个会指向'object/somenumber'。当我进入'object/somenumber'页面时,动作应该会自动触发。
更新:我已经从以前的更新和转储到我的DocRoute的内容,但没有它被触发,当我过渡到'doc'通过{{#链接到'doc' this。docID}} {{docTitle}}{{/链接}}
VpcYeoman.DocRoute = Ember.Route.extend(VpcYeoman.Authenticated,{
toggleLetterSwitch: false,
togglePermitSwitch: false,
activate: function () {
var docTemplateID = this.get('docTemplateID');
if ( docTemplateID == 2) {
this.set('toggleLetterSwitch', true);
this.set('togglePermitSwitch', false);
console.log('docTemplateID equals 2');
} else {
this.set('toggleLetterSwitch', false);
this.set('togglePermitSwitch', true);
}
}
});
UPDATE DOS: setDocID在DocsController中设置为1。这是全部内容
VpcYeoman.DocsController = Ember.ArrayController.extend({
tempDocId: 1,
actions: {
addDoc: function (params) {
var docTitle = this.get('docTitle');
var docTemplateID = 1;
var docTemplateID = this.get('tempDocId');
console.log(this.get('tempDocId'));
var store = this.store;
var current_object = this;
var doc = current_object.store.createRecord('doc', {
docTitle:docTitle,
docTemplateID:docTemplateID
});
doc.save();
return true;
},
setDocId: function (param) {
this.set('tempDocId', param);
console.log(this.get('tempDocId'))
},
}
});
正如@fanta评论的那样,看起来你正在寻找路由中的activate
钩子。当你进入定义它的路由时,它会被调用。如果你想在每次转换时都调用它,你可以考虑为你的应用定义一个基本路由,并扩展它,而不是Em.Route:
App.BaseRoute = Em.Route.extend(
activate: function () {
// Do your thing
}
);
App.YourRoutes = App.BaseRoute.extend()
可能有一个更合适的地点/时间来做这件事,但在不知道你的动作是做什么的情况下,这可能是最好的猜测。
ETA:看看你的编辑,你不会希望所有的路由都像我上面做的那样扩展App.BaseRoute;你应该在需要activate
钩子的路由中显式地包含它。