ember.js中应用程序路径的模型

时间:2014-05-15 06:13:35

标签: javascript ember.js ember-controllers

我有以下代码,我正在尝试为ApplicationRoute设置模型,但它似乎不起作用。我对Ember代码有些怀疑。首先,我可以为应用程序路径设置模型吗?其次,如果路径的模型具有名为count和fileName的字段,是否还需要在控制器中声明这些字段。看起来如果我这样做,控制器中的值优先于模型值。我也可以在this.set('total',5)中执行setupController之类的操作,即使未在任何地方定义总数。

App.ApplicationRoute=Ember.Route.extend({
model:function(){
    console.log('model called');
    return {count:3,fileName:'Doc1'};
},
setupController:function(){
    console.log(this.get('model').fileName);
    this.set('count',this.get('model.count')); //Do I manually need to do this?
    this.set('fileName',this.get('model.fileName')); //Do I manually need to do this?
}
});
App.ApplicationController=Ember.Controller.extend({
    count:0,//Is this necessary?? Can I directly set the property with declaring it like this
    fileName:''
});

1 个答案:

答案 0 :(得分:1)

你可以这样做:

App.ApplicationController=Ember.Controller.extend({
    count: function(){
       return this.get('model').get('count');
    }.property('model.count')
});

因此,只要model.count发生变化,该属性就会自动更新。

是的,您可以直接在路线上设置模型。在控制器中执行this.set('total', 5)时,只在控制器上设置该属性,而不是模型。要更新模型,您需要执行以下操作:

var model = this.get('model');
model.set('total', 5);

最后,您的setupController代码不正确。以下是Ember文档(located here)中的示例方法:

App.SongRoute = Ember.Route.extend({
  setupController: function(controller, song) {
    controller.set('model', song);
  }
});