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>
上記のコードはうまく機能しています。私が疑問に思っているのは、このキーワードを上記のように使用するか、プロトタイプメンバーを次のように使用して 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
インスタンス オブジェクト間で値を共有しないようにするために、このキーワードを使用して、監視可能なプロパティ (コンテンツ、アイテム、アイテム) をインスタンス メンバーにする必要があることを理解しています。それはそれでいいのですが、私の場合、addItemメソッドなどのイベント関数はどうでしょうか。