0

コントローラに依存するchildViews計算プロパティを使用してContainerViewを作成しようとしています。問題は、コントローラーのコンテンツが変更されてもプロパティが更新されないことです(別の依存プロパティが変更されてもプロパティは更新されません)。何が間違っているのか教えてください...

例: http: //jsfiddle.net/frZ3a/5/

Javascript:

App = Em.Application.create({});

App.controller = Em.ArrayController.create({
    reversed: false,
    content: [],
    init: function() {
        var c = this;
        function addContent() {
            if (c.get('content').length < 10) {
                c.get('content').push(c.get('content').length);
                setTimeout(addContent, 1000);
                console.log(c.get('content'));
            }
        }

        addContent();
        return this._super();
    }
});

App.TestView = Em.View.extend({
    templateName: 'single',
    number: null        
})

Em.ContainerView.create({
    templateName: 'test',
    tagName: 'div',
    controller: App.controller,
    reversedBinding: 'controller.reversed',

    childViews: function() {
        var result = this.get('controller.content').map(function(el) {
            return App.TestView.extend({number: el});
        });
        if (this.get('reversed')) {
            result.reverse();
        }
        return result;
    }.property('controller.content.@each', 'reversed')

}).append();


Em.View.create({
    templateName: 'reverse',
    controller: App.controller,
    reversedBinding: 'controller.reversed',

    reverseContent: function() {
        this.set('reversed', !this.get('reversed'));
    }
}).append();

HTML:

<script type="text/x-handlebars" data-template-name="single">
    Single view: {{view.number}}
</script>

<script type="text/x-handlebars" data-template-name="reverse">
    <a {{action reverseContent}}>Reverse</a>
</script>

</ p>

4

2 に答える 2

1

これが(動作中の)改善されたバージョンです:http://jsfiddle.net/MikeAski/Qg3uW/

編集

あなたとのいくつかの興味深いマイナーな違い...:-)

  • ヘルパーCollectionViewの代わりに使用して、each
  • togglePropertyブールスイッチングに使用し、
于 2012-08-07T14:52:59.423 に答える
0

ContainerViewが原因で、この例は機能していないようです。少し変更したとき:http: //jsfiddle.net/frZ3a/18/

また、ビューを通常のEmber.Viewに変更し、コンテンツプロパティをコントローラーのコンテンツにバインドすると、正常に機能し始めました。これは、Ember.ContainerViewの実装の違いによるものだと思います。

于 2012-08-07T14:46:27.310 に答える