1

コンテナ ビュー、子ビューから親ビュー データにアクセスしようとしていますが、成功しません。

ここにフィドラーがあります。

これを行う正しい方法は何ですか?

使用: ember-1.0.0-rc.1.js

Javascript コード:

App = Ember.Application.create({
    rootElement: '#app',
    name: 'My app',
    ready: function(){
        console.log('ready');
    },
});

App.mod = Ember.Object.extend({
    value: null,

    computed: function(value) {
        return 'computed';
    }.property()
});

App.MyController = Ember.ArrayController.create({
    content: [],
    init: function(){
        // create an instance of the model
        var item = App.mod.create({
            value: 'somevalue'
        });
        this.pushObject(item);
    }
});

App.SecondView = Ember.View.extend({
    tagName: 'span',
    classNames: ['second'],
    template: Ember.Handlebars.compile("second view with values: '{{value}}' & '{{computed}}'"),
});

App.FirstView = Ember.View.extend({
    tagName: 'span',
    classNames: ['first'],
    template: Ember.Handlebars.compile("first view"),
});

App.ViewsContainer = Ember.ContainerView.create({
    tagName: 'span',
    classNames: ['Container'],
    childViews: ['first_v', 'second_v'],
    first_v: App.FirstView,
    second_v: App.SecondView
});

そしてテンプレート:

<div id="app">
    <script type="text/x-handlebars">
        Test <b>{{App.name}}</b><br><br>
        {{#each App.MyController.content}}
               this should be printed: "{{value}}" & "{{computed}}"<br><br>
            {{view App.ViewsContainer}}
        {{/each}}
    </script>
</div>
4

2 に答える 2

5

あなたがやろうとしていることは興味深いです。しかし、私はそれを達成する方法を見つけました。これがフィドルです:http://jsfiddle.net/Sq2Dt/

ビューの階層をたどり、次のようにコンテキストにアクセスするだけです。

{{view.parentView.context.value}} and {{view.parentView.context.computed}}

親ビューのコンテキストが MyController であるのに対し、ContainerView 内のビューのコンテキストが ApplicationController であることは、ちょっと奇妙に思えます。図に行きます。

それが役立つことを願っています:)

于 2013-03-30T01:02:26.960 に答える
2

はい、これには私も困りました。このスレッドは道をたどるのに役立ちましたが、私の場合、これが解決策でした。

// I use the #which command to preserve access to the outer context once inside the #each
{{#with view as myOuterView}}
  {{#each myInnerArray}}
    //here, i get my 'name' property from the *controller* of myOuterView
    {{myOuterView.controller.name}}
    // stuff i did in inner array
  {{/each}
{{/with}

コントローラーが使用される場合と、コントローラーにアクセスするためのコンテキストが使用される場合がある理由はわかりませんが、私の動作方法を共有したいと思いました。

于 2014-02-14T21:14:57.233 に答える