如何绑定到Ember.js中的视图重新渲染?

时间:2012-12-25 18:48:08

标签: javascript ember.js

我有一些jQuery代码需要在呈现视图时运行。对于初始渲染,我可以轻松地进行

App.FooView = Ember.View.extend({
  didInsertElement: function() {
    console.log("the view was rendered");
    this.$().someStuff();
  }
});

但是由于someStuff()方法正在操纵视图元素的属性,因此我需要在由于数据绑定而重新呈现视图时运行它,因为它将丢失自定义生成的属性。

2 个答案:

答案 0 :(得分:15)

如果您想在某个属性发生变化时重新渲染视图,那么您想要的内容将如下所示:

App.FooView = Ember.View.extend({
    myProperty: 'This value might change',
    myPropertyChanged: function() {
        //Do some stuff here (maybe change the template) and call...
        this.rerender();
    }.observes('myProperty')
});

但是如果你想在视图创建后只重新渲染视图,那么你想要更像这样的东西:

App.FooView = Ember.View.extend({
    init: function() {
        this._super();
        //Do some stuff here (maybe change the template) and call...
        this.rerender();
    }
});

消息来源: http://emberjs.com/api/classes/Ember.View.html

答案 1 :(得分:0)

除了Akash的解释之外,您还希望在创建视图后使用didInsertElement钩子而不是init钩子来重新渲染。所以看起来更像是:

App.FooView = Ember.View.extend({
    didInsertElement: function() {
        this.rerender();
    }
});

虽然,我不确定为什么你需要在视图已经渲染后重新渲染。