1

次の Backbone.js モデルがあるとします。

    class App.Models.Article extends Backbone.Model
      defaluts:
        id: ''
        name: ''
        tags: []

およびその内容を表示するビュー。マスター ビューで、新しく作成した記事を次のように渡すことで、記事ビューのインスタンスを作成します。

    v = new App.Views.ArticleView({ model: new App.Models.Article() })

ページにレンダリングします。

記事ビューおよびユーザーの操作により、次のコードによっていくつかのタグがタグ配列に追加されます。

    addTag: ->        
      tags = @model.get('tags')
      tags.push({id: '', name: 'foo'})
      tags.push({id: '', name: 'bar'})

ここまでは順調ですね!次に、記事のビューを閉じて、別のビューをレンダリングします。後で記事ビューを再度レンダリングしたいので、コードは次のとおりです。

     v = new App.Views.ArticleView({ model: new App.Models.Article() })

再び実行されます。

問題はレンダリング後です。タグ配列に以前に入力されたタグがまだ表示されます。つまり、記事ビュー内にある場合は、次のように記述します。

     console.log(@model.get('tags'))

以前に追加された 2 つのオブジェクトが出力されます。各インスタンスには、参照がなくなったものではなく、作成時にデフォルト値があると思います。何か案は?Coffescript に問題はありますか?

PS問題の説明が十分に明確であることを願っています:)

4

2 に答える 2

0

解決しました!

問題は、Coffeescript がデフォルトをプロトタイプにアタッチするため、次のようにデフォルトを定義することで問題が解決することです。

    defaults: ->
      id: ''
      name: ''
      tags: []

これもプロトタイプに関連付けられていますが、関数として呼び出しごとに空のオブジェクトを返します。

于 2013-10-22T11:12:28.457 に答える