CoffeeScript + KnockoutJS Связывание функций - PullRequest
2 голосов
/ 01 октября 2011

Я использую CoffeeScript и KnockoutJS, и у меня проблема с получением значений модели моего вида из функции.

У меня есть модель вида:

window.Application || = {}
class Application.ViewModel 
    thisRef = this
    searchTerm: ko.observable("")
    search: ->
        alert @searchTerm

, которая компилируется в:

window.Application || (window.Application = {});
Application.ViewModel = (function() {
  var thisRef;
  function ViewModel() {}
  thisRef = ViewModel;
  ViewModel.prototype.searchTerm = ko.observable("");
  ViewModel.prototype.search = function() {
    return alert(this.searchTerm);
  };
  return ViewModel;
})();

Эта модель представления является частью модели родительского представления, которая представляет ее как поле.Проблема в том, что я не могу получить ссылку на модель дочернего представления.В функции поиска this это экземпляр родительского объекта, который мне не нужен.

Ответы [ 2 ]

5 голосов
/ 01 октября 2011

В search функция 'this' является экземпляром родительского элемента ...

Это зависит от того, как вы это называете. Если вы делаете

m = new Application.ViewModel
m.search()

тогда this будет m; если вы напишите

obj = {search: m.search}
obj.search()

тогда this будет obj.

В любом случае, просто используйте оператор CoffeeScript =>:

search: =>
    alert @searchTerm

Таким образом, this / @ в пределах search будет указывать на экземпляр ViewModel.

thisRef будет, как говорит Трэвис, просто указывать на класс, а не на экземпляр.

0 голосов
/ 01 октября 2011

У вас уже есть объект thisRef, используйте thisRef.searchTerm вместо @searchTerm. У меня часто такое бывает при использовании jQuery ...

doSomething = ->
  target = $(@)
  $("#blah").click ->
    target.doSomethingElse()

Поскольку @doSomethingElse() будет привязан к элементу DOM, для которого был выполнен щелчок. Не то, что я хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...