Javascript Emberjs itemController/控制器属性绑定
我已经做了一个例子来说明我的问题 绑定在itemController中定义了lastname属性,并且在my items循环中未更新fullname值Javascript Emberjs itemController/控制器属性绑定,javascript,ember.js,Javascript,Ember.js,我已经做了一个例子来说明我的问题 绑定在itemController中定义了lastname属性,并且在my items循环中未更新fullname值 我做错了什么?列表中项目的控制器与您编辑属性的控制器不同,因此它永远不会更新。必须将Properylastname指定为模型的属性(如果使用余烬数据,您只需对其使用DS.attr,它将不会被持久化)。如果使用自定义库进行数据持久化,则必须手动删除lastname属性。您可以使用余烬检查器扩展来查看当您单击项目时有5个控制器。列表中的每个项目有4个
我做错了什么?列表中项目的控制器与您编辑属性的控制器不同,因此它永远不会更新。必须将Propery
lastname
指定为模型的属性(如果使用余烬数据,您只需对其使用DS.attr
,它将不会被持久化)。如果使用自定义库进行数据持久化,则必须手动删除lastname
属性。您可以使用余烬检查器扩展来查看当您单击项目时有5个控制器。列表中的每个项目有4个,单击时将生成一个。您可以编辑第五个控制器的属性lastname
。要解决此问题,您可以使用:
JavaScript:
App = Ember.Application.create();
App.Router.map(function() {
this.resource('items', function() {
this.resource('item', {path: '/:item_id'});
});
});
App.Model = Ember.Object.extend({
firstname: 'foo',
lastname: 'bar',
fullname: function() {
return this.get('firstname') + ' ' + this.get('lastname');
}.property('firstname', 'lastname')
});
App.ItemsRoute = Ember.Route.extend({
model: function() {
return [App.Model.create({id: 1}), App.Model.create({id: 2}), App.Model.create({id: 3}), App.Model.create({id: 4})];
}
});
App.ItemRoute = Ember.Route.extend({
model: function(params) {
return this.modelFor('items').findBy('id', +params.item_id);
}
});
模板:
<script type="text/x-handlebars">
<h2>Welcome to Ember.js</h2>
{{link-to "items" "items"}}
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="items">
<ul>
{{#each item in model}}
<li>
{{#link-to 'item' item.id}}
{{item.fullname}} {{item.id}}
{{/link-to}}
</li>
{{/each}}
</ul>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="item">
{{input value=model.firstname}}
{{input value=model.lastname}}
{{model.fullname}}
</script>
欢迎来到Ember.js
{{链接到“项目”“项目”}
{{outlet}}
{{{#模型中的每个项目}
-
{{{#链接到'item'item.id}
{{item.fullname}{{item.id}
{{/链接到}
{{/每个}}
{{outlet}}
{{input value=model.firstname}
{{input value=model.lastname}
{{model.fullname}
请记住,不建议使用
ArrayController
和ObjectController
,因为它们将来会被弃用 对不起,我的意思是它不起作用。一切都起作用了@MateuszNowak不,没有。您没有看到项目列表中的fullname
总是bar
,而不是输入中指定的lastname
?@Daniel Now?@Jad我想您在这里面临的是设计问题。为什么在itemController中指定lastname
?如果您想在未在模型中指定的情况下获取默认值,您可以检查lastname
是否为空,然后才返回条
,但由于您在控制器中指定了它,因此会导致问题@MateuszNowak它可以工作,但出于某种原因@Jad希望在控制器中指定此属性。