【问题标题】:Knockout with coffeescript用咖啡脚本淘汰赛
【发布时间】:2013-04-10 17:08:22
【问题描述】:

我将使用带有 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>

以上代码运行良好。我想知道的是我应该使用 this 关键字声明 addItem 事件如上或 prototype 成员如下

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 方法之类的事件函数呢

【问题讨论】:

  • 如果有什么要继续的,我总是声明我的方法供数据绑定使用,就像你在第二个例子中一样。

标签: knockout.js coffeescript


【解决方案1】:

在第二种情况下效果很好,试试吧;)。

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

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

【讨论】:

  • 这是一个好的答案还是我错过了另一个问题?
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2011-06-30
  • 2013-06-10
  • 2012-08-26
相关资源
最近更新 更多