2014-01-28 2 views
1

Я новичок в KnocoutJs. Буду признателен за любую оказанную помощь. Я хочу вызвать функцию при щелчке div, и одна и та же функция должна вызываться внутри вычисленной функции. Ниже моя функция.Как остановить стрельбу, наблюдаемую на вычисленной функции в нокауте js?

DetailViewModel.prototype.DisplayChange = function (name) { 
    this.currentSelection(name); 
    switch (this.currentSelection()) { 
    case "abc": 
     { 
      this.abc(); 
      break; 
     } 
    case "xyz": 
     { 
      this.showxyz(); 
      break; 
     } 
    } 
}; 

Я вызываю эту функцию при щелчке в файле .cshtml и внутри вычисленной функции.

<div class ="TestTabs" data-bind="foreach: availableTabs"> 
    <div class="Tab-ListItem" 
     data-bind="text: $data, click: $parent.DisplayChange.bind($parent), 
      css : {tabSelected : $parent.currentSelection() == $data}"> 
    </div> 
</div> 

И мой вычислен:

this.selectedData = ko.computed(function() { 
    return _this.compselectedData(); 
}); 

public compselectedData(): { 
    this.DisplayChange(this.currentSelection()) 
} 

Даже когда я называю DisplayChange() по щелчку, он стреляет в compselectedData(). Как остановить запуск функции при щелчке?

ответ

1

У вас есть бесконечный цикл:

  • Вычисленное selectedData всегда будет переоценена, если currentSelection модифицируется.
  • CurrentSelection изменяется внутри вычисленного.

Чтобы разорвать петлю, я предлагаю следующее:

на события мыши, измените currentSelection наблюдаемую вместо вызова функции DisplayChange:

<div class ="TestTabs" data-bind="foreach: availableTabs"> 
    <div class="Tab-ListItem" 
     data-bind="text: $data, click: $parent.currentSelection($data), 
      css : {tabSelected : $parent.currentSelection() == $data}"> 
    </div> 
</div> 

Не изменять наблюдаемое в функция DisplayChange:

DetailViewModel.prototype.DisplayChange = function (name) { 
    switch (this.currentSelection()) { 
    case "abc": 
     { 
      this.abc(); 
      break; 
     } 
    case "xyz": 
     { 
      this.showxyz(); 
      break; 
     } 
    } 
}; 

Это красота нокаута, вы меняете только модель и просмотр обновляется автоматически.

+0

Но. как насчет щелчка вкладки. это говорит мне, что объект не поддерживает свойство. Я думаю, мне нужно вызвать функцию DisplayChange на вкладке «Щелчок». Пожалуйста, дайте предложения –

+0

Привет, Вы можете предложить мне, как я застрял в этой проблеме? –

Смежные вопросы