【发布时间】:2013-10-31 02:51:34
【问题描述】:
假设我有以下 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'))
它将输出之前添加的两个对象。我希望每个实例在创建时都有其默认值,而不是不再引用它的东西。有任何想法吗? Coffescript 有什么问题吗?
附:我希望问题陈述足够清楚:)
【问题讨论】:
-
甚至在我关闭文章视图之前,我都会调用 @remove 来删除它并调用 @model.clear().set(@model.defaults),还是一样的问题。
-
coffeescript 生成 Article.prototype.defaults =,它将默认值附加到 Article 对象的原型。也许问题出在这一点上?!
-
很好的问题,为什么coffeescript 编译这样的东西?!这也会使任何属性出现问题,甚至是非数组/对象属性。
标签: arrays backbone.js coffeescript