2013-04-10 103 views
2

我要用Coffeescript用Knockout。以下是簡單的示例代碼。用咖啡標記敲除

**** 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方法在我的情況下

+0

如果還有什麼可以繼續的話,我一直聲明我的方法可以像第二個例子中那樣使用數據綁定。 – Thewads 2013-04-10 07:59:46

回答

2

它在第二種情況下正常工作,只是嘗試;)。

class Randomized 
    constructor: -> @items = [Math.random()] 
    first: -> @items[0] 

console.log new Randomized().first() 
console.log new Randomized().first() 
console.log new Randomized().first() 
+1

感謝您的確認 – Ray 2013-04-10 09:29:44

+1

是一個好的答案或是我還有另一個問題嗎? – Ven 2013-04-10 20:44:42

+1

標記爲接受答案 – Ray 2013-04-11 03:01:01