0

我有一个 Ember 对象及其实例化,在定期调用“updateName”方法时,属性值会更新,但不会通过“模型”反映在模板中。任何猜测我做错了什么?

var App = Ember.Application.create();

App.Router.map(function(){
    this.route('application');
});

App.myData = Ember.Object.extend({
    name: 'luke',
    updateName: function(){
        this.set('name', Math.random(1,10)+'');
    },
    newName: function(){
        return this.get('name');
    }.property('name')
});

App.myDataObj = App.myData.create({});
setInterval( function(){ 
    App.myDataObj.updateName()
    console.log( App.myDataObj.get('newName') )
}, 5000 );

App.ApplicationRoute = Ember.Route.extend({
    model: function(){
        return {
            name: App.myDataObj.get('newName')
        };
    }
});

输出:卢克,就是这样

帮助赞赏

4

1 回答 1

1

免责声明:这不是 ember 中应该做的事情,例如你应该使用模板/路由/控制器串联,并使用Ember.run.later代替setInterval等。但是,在模板中引用模型是有效的,这里是你如何实现它:

模板:

<script type="text/x-handlebars">
  <h2>Application</h2>
  {{model.newName}}
</script>

应用程序:

App = Ember.Application.create({
  ready: function() {
    console.log('App ready');
  }
});

App.myData = Ember.Object.extend({
  name: 'luke',
  updateName: function(){
    this.set('name', Math.random(1,10)+'');
  },
  newName: function(){
    return this.get('name');
  }.property('name')
});

App.myDataObj = App.myData.create();

setInterval( function(){ 
  App.myDataObj.updateName();
  console.log( App.myDataObj.get('newName') );
}, 5000 );

App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    return App.myDataObj;
  }
});

演示:

http://jsbin.com/ISOZIma/3/edit

希望能帮助到你。

于 2013-10-09T11:23:54.443 回答