在 Ember.js 中,修改 Controller 属性值的最佳实践是什么?
考虑以下玩具应用程序:
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>
我可以通过运行 App.myModel.set('name', 'Jane')
来更改 firstName
的值。但我很难更改 lastName
的值。
如何实时修改lastName
?此外,App.ApplicationController
的实例存储在DOM中的哪里?
最佳答案
您是否正在尝试修改模型中 Controller 的属性?因为这非常违背 MVC 的工作方式。 Your controller should be modifying your view 。因此,在这种情况下,您的 lastName
属性应该存储在您的模型中,而不是存储在 Controller 上。
由于您直接绑定(bind)到模型中的属性,因此您无权访问模型本身。最好的方法是绑定(bind)到对象,然后您就可以访问它的所有属性:
firstNameBinding:“App.myModel”
然后我们可以从 Controller 更改 App.myModel
上的所有属性 (this.set('firstName.someRandomProperty', 'Adam');
) .
ApplicationController
是一个对象,因此不会存储在 DOM 中。 Ember 使用 concept of a factory method用于提供对对象的访问。例如,要获取 ApplicationController
实例,我们可以使用以下内容,尽管除非您确实确定需要它,否则不建议这样做,因为可以通过更合乎逻辑的方式访问实例:
this.container.lookup('controller:application')
关于javascript - 更改 Controller 属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15485809/