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

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リアルタイムで変更するにはどうすればよいですか?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 に答える