1

在 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'
});

乙肝:

<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实时修改?此外,App.ApplicationController存储在 DOM 中的实例在哪里?

4

1 回答 1

0

您是否试图从您的模型中修改控制器的属性?因为这非常违背 MVC 的工作方式。您的控制器应该正在修改您的视图。所以在这种情况下,你的lastName属性应该存储在你的模型中,而不是控制器上。

由于您直接绑定到模型中的属性,因此您无法访问模型本身。最好的方法是绑定到对象,然后您就可以访问它的所有属性:

firstNameBinding: "App.myModel"

App.myModel然后我们可以从控制器 ( this.set('firstName.someRandomProperty', 'Adam');)更改所有属性。

ApplicationController是一个对象,因此不会存储在 DOM 中。Ember 使用工厂方法的概念来提供对对象的访问。例如,要获取ApplicationController实例,我们可以使用以下方法,尽管除非您确实确定需要它,否则这是不可取的,因为可以以更合乎逻辑的方式访问实例:

this.container.lookup('controller:application')
于 2013-03-18T20:14:24.337 回答