相关疑难解决方法(0)

Ember.js - 使用Handlebars帮助程序检测子视图是否已呈现

有许多问题以这样或那样的方式提出:"在呈现视图的某些部分之后我该怎么做?" (这里,这里,这里只是为了给几个).答案通常是:

  1. 用于didInsertElement最初呈现视图时运行代码.
  2. 用于刷新视图更改Ember.run.next(...)运行代码,如果需要访问创建的DOM元素.
  3. 在加载所需数据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

8
推荐指数
1
解决办法
4495
查看次数

标签 统计

ember.js ×1