开发者问题收集

无法在控制器中设置模型属性

2015-12-04
2775

我有一个名为“test”的简单模型,如下所示:

export default DS.Model.extend ({
  name: DS.attr('string')
  })

我在“test”路由中的模型钩子定义如下:

 export default Ember.Route.extend({
   model() {
     return this.store.createRecord('test');
     }
 });

我尝试在“test”控制器中为 model.name 分配一个初始值,但无法使“set”工作。

export default Ember.Controller.extend({
  init: function() {
    let mod = this.get('model');
    this.set (mod.name, "dummyName");
    }
})

Ember 检查器显示 mod=null。我做错了什么?

更新: 我尝试了下面评论中推荐的 4 种语法更改。似乎都不起作用。我收到以下每个错误消息:

4 种建议的语法似乎都不起作用。 我收到以下每个错误消息:

  1. 断言失败:如果没有给出 obj,路径“model.name”必须是全局的。错误:断言失败:如果未提供任何对象,则路径“model.name”必须是全局的。
  2. 您需要提供一个对象和键来“set”。错误:断言失败:您需要提供一个对象和键来“set”。
  3. 无法读取 null 的属性“set” TypeError:无法读取 null 的属性“set”
  4. 无法找到路径“model”中的对象或已销毁。错误:属性设置失败:无法找到路径“model”中的对象或已销毁。

似乎在告诉我“model”出于某种原因为 null。

更新: 我的控制器实际上看起来像这样:

从“ember”导入 Ember;

export default Ember.Controller.extend({

init: function() {
this.set ('model.name', 'dummyName');
},
action: {
save() {
this.get('model').save();
this.transitionToRoute('scenarios');
return false;
},
cancel(){
this.transitionToRoute('scenarios');
return false;
}
}
});

使用此控制器,我收到此错误:

属性设置失败:路径“model”中的对象无法找到或已被销毁。错误:属性设置失败:路径“model”中的对象无法找到或已被销毁。

如果我取出“init”钩子,“save”和“cancel”操作就可以正常工作。命名似乎没问题;我使用 ember-cli pods 生成初始代码

在调用控制器的“init”钩子时“model”是否加载?

2个回答

尝试将其添加到您的 route.js 文件中:

setupController(controller, model) {
  controller.set("model", model);
}
jeffdill2
2015-12-29

很可能模型未在 init 钩子中加载。您可以在稍后的运行中包装代码:

init: function() {
  this._super();
  var _this = this;
  Ember.run.later(function() {
    _this.set('model.name', 'dummyName');
  });
},

或者更好的方法是在创建模型时设置属性:

return this.store.createRecord({name: 'test'});

如评论中所建议。

LukeC
2015-12-04