我将把 Knockout 与 Coffeescript 结合使用。以下是简单的示例代码。
**** coffeescript ****
class NewsItem
constructor : (content) ->
@content = ko.observable(content)
class ViewModel
constructor : ->
@items = ko.observableArray()
@item = ko.observable()
@items.push new NewsItem('a')
@items.push new NewsItem('b')
@items.push new NewsItem('c')
@addItem = ->
@items.push new NewsItem @item()
$ ->
ko.applyBindings new ViewModel
return
**** html ****
<ul data-bind="foreach: items">
<li data-bind="text: $data.content"></li>
</ul>
<div>
<input type="text" data-bind="value: item" />
<button data-bind="click: addItem">Add Item</button>
</div>
上面的代码运行良好。我想知道的是,我应该使用 this 关键字(如上)或 prototype 成员声明 addItem 事件,如下
class NewsItem
constructor : (content) ->
@content = ko.observable(content)
class ViewModel
constructor : ->
@items = ko.observableArray()
@item = ko.observable()
@items.push new NewsItem('a')
@items.push new NewsItem('b')
@items.push new NewsItem('c')
addItem : ->
console.log @item()
@items.push new NewsItem @item()
$ ->
ko.applyBindings new ViewModel
return
我了解可观察属性(内容、项目、项目)应该是使用 this 关键字的实例成员,以避免在实例对象之间共享值。没关系,但是事件函数(例如我的例子中的 addItem 方法
)又如何呢?最佳答案
在第二种情况下效果很好,试试吧;)。
class Randomized
constructor: -> @items = [Math.random()]
first: -> @items[0]
console.log new Randomized().first()
console.log new Randomized().first()
console.log new Randomized().first()
关于knockout.js - 用 CoffeeScript knockout ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15919993/