【问题标题】:Knockout event binding淘汰赛事件绑定
【发布时间】:2016-03-10 22:32:16
【问题描述】:

我想将 myFunction 与 change 或 onchange 事件绑定。

这是我要在 ViewModel 中绑定的函数:

myFunction: function spinSeconds(event, ui) {
  if (ui.value >= 60) {
      $(this).spinner('value', ui.value - 60);
      $('#minutes').spinner('stepUp');
      return false;
  } else if (ui.value < 0) {
      $(this).spinner('value', ui.value + 60);
      $('#minutes').spinner('stepDown');
      return false;
  }
}

我在 openModal() 函数中调用这个函数:

function openModal() {

    //
    //some code here
    //

    $('#seconds').spinner({
        spin: spinSeconds
    });
}

我是这样使用的:

<div class="col-sm-9">
   <input id="seconds" value=10 size=2 data-bind="value: PreExecWaitMin, event: {change: myFunction}" /> minutes
</div>

我正面临这个错误:

'未捕获的引用错误:无法处理绑定“事件:函数(){return {change:myFunction}}” 消息:spinSeconds 未定义'

我搜索了许多事件绑定示例,但无法解决我的问题。感谢您的帮助。

【问题讨论】:

  • 我正在使用这些微调器:jsfiddle.net/xHzMw/228 我认为使用更改事件进行绑定是合适的。

标签: javascript knockout.js data-binding event-binding


【解决方案1】:

The first argument to an event-bound function$data。二是事件。但是观察输入变化事件的方法是subscribe绑定value

对于高级用户,如果您想注册自己的订阅 收到有关可观察对象更改的通知,您可以调用他们的订阅 功能。例如:

myViewModel.personName.subscribe(function(newValue) {
    alert("The person's new name is " + newValue);
});

subscribe 函数是 KO 的多少部分在内部工作。最多 有时您不需要使用它,因为内置绑定 和模板系统负责管理订阅。

更有可能的解决方案是基于值绑定变量设置computed。订阅是隐式的。

如果spinner 有自己的自定义绑定处理程序会更好,尽管您可能可以摆脱它,因为它似乎只是一种视觉效果。 jQuery 选择器在 Knockout 中是一种明显的代码异味。

【讨论】:

  • 为完整起见,请附上订阅示例。
  • @Michael 查看扩展答案
猜你喜欢
  • 2013-09-10
  • 2022-10-17
  • 2013-02-04
  • 2013-08-17
  • 2013-05-04
  • 1970-01-01
  • 2018-08-04
  • 2013-10-31
  • 2013-08-14
相关资源
最近更新 更多