在Ember.js中,修改控制器属性值的最佳做法是什么?
考虑以下玩具应用程序:
JS:
window.App = Ember.Application.create();
App.ApplicationController = Ember.Controller.extend({
firstNameBinding: "App.myModel.name",
lastName: "Smith",
signedIn: true
});
App.myModel = Ember.Object.create({
name: 'John'
});
HB:
<script type="text/x-handlebars" data-template-name="application">
{{#if signedIn}}
Welcome back, <b>{{firstName}} {{lastName}}</b>!
{{else}}
Welcome, <b>Guest</b>!
{{/if}}
</script>
我可以通过运行firstName
来更改App.myModel.set('name', 'Jane')
的值。但是我很难改变lastName
的价值。
如何实时修改lastName
?此外,DOM中存储的App.ApplicationController
实例在哪里?
答案 0 :(得分:0)
您是否尝试从模型中修改控制器的属性?因为这与MVC的工作方式非常相反。 Your controller should be modifying your view。因此,在这种情况下,您的lastName
属性应存储在模型中,而不是存储在控制器上。
由于您直接绑定到模型中的属性,因此您无权访问模型本身。最好的方法是绑定到对象,然后您可以访问其所有属性:
firstNameBinding: "App.myModel"
然后我们可以从控制器(App.myModel
)更改this.set('firstName.someRandomProperty', 'Adam');
上的所有属性。
ApplicationController
是一个对象,因此不会存储在DOM中。 Ember使用concept of a factory method来提供对象的访问权限。例如,要获取ApplicationController
实例,我们可以使用以下内容,但除非您确定需要它,否则它是不可取的,因为实例可以更合理的方式访问:
this.container.lookup('controller:application')