2015-09-29 2 views
0

Я пытаюсь использовать привязку кликов для увеличения и вычитания значения в привязке текста к одному. Я не уверен, как ссылаться на myNumber.Перехват привязки нокаута с плагином сопоставления

HTML:

<a data-bind="click: increment"> 
    <i class="fa fa-chevron-up"> </i> 
</a> 
<div data-bind="text: myNumber"></div> 
<a data-bind="click: subtract"> 
    <i class="fa fa-chevron-down"> </i> 
</a> 

ЯШ:

<script type="text/javascript"> 
    function increment(result){ 
     result.myNumber ++; 
    } 
    function subtract(result){ 
     result.myNumber --; 
    } 
    $.getJSON("/app/api/", function(result) { 

     function viewModel() { 
      return ko.mapping.fromJS(result); 
     }; 

     ko.applyBindings(new viewModel()); 
    }) 
    .error(function() { alert("error"); }); 
</script> 
+0

у вас есть текст: MyNumber в вашем привязки данных, где он в коде ??? – saj

+0

Он получает его из viewModel. Этот бит отлично работает – user3972986

ответ

0

Вы не увеличиваем наблюдаемым, как если бы это было число. Это сеттер/геттер. Кроме того, функции, которые вы связываете, должны быть частью модели viewmodel. Вы можете сделать это в своем обратном вызове getJSON до applyBindings.

vm = { 
 
    myNumber: ko.observable(3), 
 
    increment: function(result) { 
 
    result.myNumber(result.myNumber() + 1); 
 
    }, 
 
    subtract: function(result) { 
 
    result.myNumber(result.myNumber() - 1); 
 
    } 
 
}; 
 
ko.applyBindings(vm);
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css"> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<a href="#" data-bind="click: increment"> 
 
    <i class="fa fa-chevron-up"> </i> 
 
</a> 
 
<div data-bind="text: myNumber"></div> 
 
<a href="#" data-bind="click: subtract"> 
 
    <i class="fa fa-chevron-down"> </i> 
 
</a>

+0

Imho @royJ, мы можем сделать эту простую операцию еще лучше (вам это может быть сложно), а не заполнять представление (не нужно здесь). что-то вроде этого http://jsfiddle.net/5h3vvn3q/. –

+0

@supercool К сожалению! «Bind» не нужен. Это было по-другому, если было иначе. Я хотел, чтобы все было так же, как и OP, поэтому я использую 'result'. –

+0

ooh я вижу сейчас @royJ Я только что видел вопрос OP: D LoL. ура –

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