1

同じものの多くのインスタンスを使用してview 、さまざまなソースから同じ種類のデータを表示したい (ロガーがいくつかの距離アプリ インスタンスをチェックするだけ)、logsAJAX を使用してデータを取得するための空の配列とメソッドを含む単純なビューを作成しました (forサンプル コードのダミー ループ) )。残念ながらlogs、プロパティはインスタンス間で共有されるため、すべてのビューに他のすべてのインスタンスのアイテムが表示されます。なぜですか? 現在のインスタンスにカプセル化されていないのはなぜですか?

私の問題を示す JsFiddle があります: http://jsfiddle.net/biesior/wYGLT/

コードは次のとおりです。

HTML:

<div id="main"></div>

<script type="text/x-handlebars">
    ellou' Logger
    {{#view App.SomeLogger id="logger1"}}{{/view}} <br>
    {{#view App.SomeLogger id="logger2"}}{{/view}} <br>
    {{#view App.SomeLogger id="logger3"}}{{/view}} <br>
</script>

<script type="text/x-handlebars" data-template-name="logger-template">
    <h1>ID: {{view.elementId}}</h1>
    <ul>
      {{#each log in view.logs}}
        <li>{{log.txt}}</li>
      {{/each}}
    <ul>
</script>

<script>
App = Ember.Application.create({ rootElement: "#main"});
App.SomeLogger = Ember.View.extend({
    layoutName: 'logger-template',
    logs: [],
    init: function () {
        this._super();
        var inst = this;
        setTimeout(function(){ inst.readLogs() }, 500);
    }, 
    readLogs: function(){
        var inst = this;
        var logs = inst.get("logs");
        for (var i = 1; i <= 3; i++) {
            logs.pushObject({txt: 'Log no.: ' + i + " in: " + inst.get("elementId")});
        }
    }

});
</script>
4

1 に答える 1

1

SomeLoggerこれは、クラスで共有配列インスタンスを宣言しているためです。内に作成する必要があるinitため、新しくSomeLogger作成されたそれぞれに独自のlogs配列があります。

App.SomeLogger = Ember.View.extend({
    layoutName: 'logger-template',
    logs: null,
    init: function () {
        this._super();
        this.set('logs', []); // each new SomeLogger created will have your own array
        var inst = this;
        setTimeout(function(){ inst.readLogs() }, 500);
    }, 
    readLogs: function(){
        var inst = this;
        var logs = inst.get("logs");
        for (var i = 1; i <= 3; i++) {
            logs.pushObject({txt: 'Log no.: ' + i + " in: " + inst.get("elementId")});
        }
    }

});

これは更新されたフィドルですhttp://jsfiddle.net/marciojunior/RrKzh/

于 2013-10-22T11:11:42.297 に答える