javascript - 更改 Controller 属性值

标签 javascript ember.js

在 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/

相关文章:

javascript - 如何获取单元格中嵌入的文本框的值

javascript - getElementsByClassName/Id 返回的数组中元素顺序是否一致?

javascript - Ember 创建多态记录

javascript - 如何在 Ember-App-Kit(EAK) 中实现 Ember-Validations

jquery - 使用 ember.js 和 ember easyform 包装 bootstrap/jquery 小部件

javascript - 嵌套数组元素的 Ember 计算属性

javascript - react native componetWillUpdate 不起作用

javascript - 无法在 vue.js 中的 axios 中发布

javascript - 如何在 Watir 中引用 JavaScript 工具提示

asp.net-mvc - 如何像绘制 Ember.TextField 一样绘制 Password 字段?