我在CS上了一堂课:

class Model
  constructor: (objectParams) ->
    @object = ##object
    ###constructor

  baseObject: => {}
  validate: ko.computed =>
    console.log ko.toJS @object


问题在于'validate',它是一个原型属性,其中ko.computed函数的绑定上下文应该是构造函数,但要编译为此:

Model.prototype.validate = ko.computed(function() {
  return console.log(ko.toJS(Model.object));
});


我希望将其绑定到构造函数,但粗箭头=>似乎仅以此方式工作:

property: () =>


这样就行不通了

  validate: =>
    ko.computed => console.log ko.toJS @object


因为无法在函数中定义ko.computed

我该如何解决?

最佳答案

将函数绑定到实例并对其进行“预处理”,如下所示

pipe = (fn)->
    return ->
        fn.apply(@, arguments)


class A
    foo: pipe -> @bar()
    bar: -> ...


从管道函数(在您的情况下为ko.computed)中返回另一个函数,该函数包装您的初始函数并通过.apply调用它。

无需粗线箭头,因为您拨打的电话带有@

关于javascript - CoffeeScript类和绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13176414/

10-12 13:13