3

私は ember.js を学んでいますが、まだ何も構築していません。

モデル オブジェクトにデータを格納し、ビューとモデルの間の接着剤として機能するコントローラーを使用しています。コントローラーにはモデルのインスタンスに設定されたコンテンツがあり、ビューにはコントローラー内のコンテンツへのバインディング (したがってプロキシによるモデルへのバインディング) があります。そのようです:

// js
App.MyModel = Ember.Object.extend({foo:''});
App.myController = Ember.Object.create({
    content: App.MyModel.create()
});

// html
{{view Ember.TextInput valueBinding="App.myController"}}

ここまでは順調ですね。しかし、このパラダイムをネストされたコレクションに適用する方法がわかりません。

//js
App.ChildController = Ember.ArrayController.extend();
App.NestedModel = Ember.Object.extend({
    init: function() {
        this._super();
        this.set('children', []);
        // Here: I can't give a global name for the content binding, and I don't know how to give a relative one
        this.set('childController', App.ChildController.create({contentBinding: 'children');
    }
});
App.myController = Ember.ArrayController.create({
    content:[],
    newChild: function() {
        this.pushObject(App.NestedModel.create());
    }
});


// html
{{#collection contentBinding="App.myController"}}
    {{#collection contentBinding="content.childController"}} <!-- nope -->
        {{content.childField}}
    {{/collection}}
{{/collection}}

これはあなたがいじることができるものです:http://jsfiddle.net/DwheG/

私が求めているのは:

  1. 私は物事を正しくモデリングしていますか?
  2. 子コントローラーのコンテンツをバインドするにはどうすればよいですか? 文字列を使用する必要がありますか? オブジェクト ( this) を渡してもうまくいきませんでした。Ember のパス解決アルゴリズムはどこかに文書化されていますか?
  3. ネストされたコレクション ヘルパーをネストされたコントローラにバインドするにはどうすればよいですか?
4

1 に答える 1

0

ソースを読んだところ、バインディングはパスでしか指定できないことが確認できました。

Ember はgetPath(root, path)パスを解決するために使用します。rootは検索を開始するオブジェクトで、path は文字列です。パスがグローバルの場合、ルート要素は省略できます (その場合、ルートは に設定されますwindow)。したがって、たとえば、評価さgetPath(myController, 'foo.bar')れると返されます。myController.foo.bar

つまり、バインディングを作成するために配列の包含オブジェクトを何らかの方法で参照する必要があり、これを行うための組み込み機能がないことを考えると、モデルに包含オブジェクトへの参照を追加しただけです。ここを参照してください:http://jsfiddle.net/CP448/1/

于 2012-07-14T05:31:53.853 に答える