有许多问题以这样或那样的方式提出:"在呈现视图的某些部分之后我该怎么做?" (这里,这里,这里只是为了给几个).答案通常是:
didInsertElement在最初呈现视图时运行代码.Ember.run.next(...)运行代码,如果需要访问创建的DOM元素.isLoaded后,使用观察者或类似属性执行某些操作.令人恼火的是,这导致了一些非常笨拙的样子:
didInsertElement: function(){
content.on('didLoad', function(){
Ember.run.next(function(){
// now finally do my stuff
});
});
}
Run Code Online (Sandbox Code Playgroud)
当你使用ember-data时,这实际上并不一定有用,因为isLoaded可能已经是真的(如果记录之前已经加载过,并且不再从服务器请求).因此,正确排序是很困难的.
最重要的是,您可能已经在视图模板中观看isLoaded,如下所示:
{{#if content.isLoaded}}
<input type="text" id="myTypeahead" data-provide="typeahead">
{{else}}
<div>Loading data...</div>
{{/if}}
Run Code Online (Sandbox Code Playgroud)
并在您的控制器中再次执行它似乎是重复.
我提出了一个有点新颖的解决方案,但它要么需要工作,要么实际上是一个坏主意......任何一种情况都可能是真的:
我写了一个小的Handlebars帮助器{{fire}},当执行包含的把手模板时会触发一个带有自定义名称的事件(即应该每次重新渲染子视图时,对吗?).
这是我很早期的尝试:
Ember.Handlebars.registerHelper('fire', function (evtName, options) {
if (typeof this[evtName] == 'function') {
var context = this;
Ember.run.next(function () {
context[evtName].apply(context, options); …Run Code Online (Sandbox Code Playgroud) ember.js ×1