我正在尝试创建一个新记录,但是没有任何来自字段的数据会自动传递,正如我所期望的那样Ember(从我读过的内容)。
我的模板:
<form {{action save content on="submit"}}>
{{input value=name}}
<button type="submit"}}>Next</a>
我读过content
的内容是model
的别名,并且互换这些内容没有任何区别。
我的路线:
App.CampaignsNewRoute = Ember.Route.extend({
actions: {
save: function(campaign) {
console.log(campaign.name);
}
},
model: function(controller) {
return this.store.createRecord('campaign');
}
});
我的控制员:
App.CampaignsNewController = Ember.ObjectController.extend({
pageTitle: 'New Campaign Setup'
});
当我点击下一个&#39;它记录undefined
。仅记录campaign
会显示它是Ember模型,但没有name
属性。 name
模型上定义了campaign
。将输入设置为{{input value=content.name}}
会将name
属性放回到返回的模型中,但它仍然是undefined
。我在这个过程中遗漏了什么? EmberJS网站并没有从我能找到的地方展示如何做到这一点。
-
作为旁注:我最初使用的是App.CampaignsNewController = Ember.Controller.extend
,因为我的模型返回了一个promises的哈希值,其中一个是数组,而Ember并不喜欢我使用array
或object
控制器。我将其简化为上述内容,以验证它不是造成问题的原因。所以考虑到这一点的任何解决方案都会很棒。
编辑:我可以通过this.get('controller').get('name')
访问模板字段,但肯定没有必要吗?将我的控制器更改为Ember.Controller.extend
也会阻止其工作,很想知道原因。澄清这里的最佳实践仍然很棒!
Edit2: this.get('controller.content').get('name')
如果控制器只是Ember.Controller
而不是Ember.ObjectController
且模板有{{input value=content.name}}
,则有效。我会与之合作,但希望有人能澄清这是正确的方法。
答案 0 :(得分:1)
ObjectController
是去这里的方式。您可以使用一个特定模型,新模型支持它,并且您可以向控制器添加其他属性以在模板中使用。
App.IndexRoute = Ember.Route.extend({
actions: {
save: function(campaign) {
console.log(campaign.get('color'));
}
},
model: function() {
return Ember.RSVP.hash({
record: this.store.createRecord('color'),
all: this.store.find('color')
});
},
setupController: function(controller, model){
this._super(controller, model.record);
controller.set('allColors', model.all);
}
});
App.IndexController = Em.ObjectController.extend({
});
在模板中,只要您想要访问支持模板的模型上的任何内容,您就可以访问它,就像模型是当前范围一样。
{{name}}
如果您想访问控制器上存在的任何属性,您将使用它在控制器上的属性名称。
{{allColors.length}}
以下是一个例子:
<form {{action save model on="submit"}}>
Color:{{input value=color}}<br/>
<button type="submit">Next</button>
</form>
<ul>
{{#each item in allColors}}
{{#unless item.isNew}}
<li>{{item.color}}</li>
{{/unless}}
{{/each}}
</ul>
Ember Data隐藏属性,它们不会直接存在于对象上,因此campaign.name
将永远返回undefined。如果你做campaign.get('name')
,你会得到真实的答复。