KnockoutJS - 使用不在移动设备上运行的参数单击绑定

时间:2014-09-02 09:22:07

标签: javascript asp.net knockout.js javascript-events single-page-application

我正在开发一个需要与移动和桌面设备完全兼容的Web应用程序。我将click事件绑定到节点并将参数传递给viewmodel的函数,如下所示:

<a href="#" class='btn btn-danger' data-bind="click: bsDeleteModal.open.bind($data, 1)"><span>Delete</span></a>

它在桌面浏览器上正常运行,但在手机或平板电脑上却无法运行。我已经在平板电脑和手机上的Android原生浏览器,Windows Phone 8.1上的Internet Exporer 11,iPhone Safari和每个设备上的移动版Chrome上测试了此代码,但没有运气。

这是我的视图模型过度简化:

var DeleteModalViewModel = function(/*parameters....*/){
  var self = this;
  //parameters...
  self.open = function(position){
    alert("position: " + position);
  }
}

var vm = (function(){ //...my viewmodel...
  var self = this;
  self.bsDeleteModal = new DeleteModalViewModel(/*parameters...*/);

  //additional parameters...
})();

ko.applyBindings(vm);

knockoutjs 3框架中是否存在已知问题或错误,阻止我在移动设备上传递参数时绑定事件?
我也试过这样传递它:

<a data-bind="click: function(data, event){ bsDeleteModal.open.bind($data, 1) }" />

此外,我尝试在函数名称之前添加$ root,认为移动设备无法正确解析函数名称但没有运气。

<a data-bind="click: function(data, event){ $root.bsDeleteModal.open.bind($data, 1) }" />

非常感谢任何帮助。提前谢谢。

编辑:我忘了提及:我的html代码位于模板标记内,当页面加载时,该标记作为局部视图加载。这可能很重要,因为之前我遇到过动态模板绑定问题。

2 个答案:

答案 0 :(得分:0)

某些设备+浏览器组合可能不存在绑定功能。

这是一个ES5功能,如果它缺少需要填充

检查是否存在Function.prototype.bind

答案 1 :(得分:0)

我设法在同事的帮助下解决了这个问题 事实证明,问题与模板绑定有关,因为移动设备上的按钮呈现在页面“后面” 一旦我在css中将z-index为9999设置为按钮,绑定工作正常。