knockout.js - 用 CoffeeScript knockout

标签 knockout.js coffeescript

我将把 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/

相关文章:

javascript - 未通过 jQuery/CoffeeScript 设置所选值

javascript - 如何使用 AngularJS 或 CoffeeScript 在 ng-click 上重定向到另一个页面?

javascript - Rails 5 中的 Turbolinks 中断 Bootstrap 选择下拉菜单

javascript - 如何创建双向 ko.compulated() 数组过滤器

javascript - 根据数据属性如何隐藏标签并显示在另一个 div 中

javascript - Knockoutjs 立即验证

javascript - knockout 绑定(bind)处理程序 - IE9 上未定义的 bindingContext.$data

javascript - 绑定(bind)到由 collection.create() 创建的模型的错误事件?

selenium - 无法在 Protractor 和 CoffeeScript 中访问 WebDriverJS 等待 'until'

javascript - 无法使用可计算的 knockout js