更改控制器属性值

时间:2013-03-18 20:01:13

标签: javascript ember.js

在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实例在哪里?

1 个答案:

答案 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')