【问题标题】:Use Knockout 'submit' binding with child view model and inherited callback method将 Knockout 'submit' 绑定与子视图模型和继承的回调方法一起使用
【发布时间】:2013-03-06 16:35:44
【问题描述】:

我正在尝试使用 Knockout JS 解决以下问题

  • 需要通过“提交”绑定将 HTML 表单绑定到子视图模型
  • 绑定到“提交”的回调方法是继承方法

以下代码将更好地解释上述场景。可以在this fiddle 中找到相同的内容。

function MasterViewModel() {
    var self = this;
    self.employeeViewModel = new EmployeeViewModel();
};

function EmployeeViewModel () {
    var self = this;
    self.empFirstName = ko.observable();
    self.empLastName = ko.observable();
    self.employeeList = ko.observableArray([]);
};

EmployeeViewModel.prototype.addEmployee = function () {
    var self = this;
    self.employeeList.push(new Employee(self.empFirstName(), self.empLastName()));
}

function Employee(firstNameParam, lastNameParam) {
    var self = this;
    self.firstName = ko.observable(firstNameParam);
    self.lastName = ko.observable(lastNameParam);
}

ko.applyBindings(new MasterViewModel());

在 HTML 中,我使用如下所示的提交绑定;

<form data-bind="submit: employeeViewModel.addEmployee">
</form>

我观察到,为回调方法传递的“this”上下文始终是“MasterViewModel”的一个实例。我搜索了一种通过“提交”绑定传递不同上下文的方法,但徒劳无功。

这是我试图利用的限制吗?有解决方法吗?

谢谢。

【问题讨论】:

  • 找到了答案。发现作为“提交”绑定(或任何绑定)的参数,您可以传递 JavaScript。因此,将绑定修改为; &lt;form data-bind="submit: function() {employeeViewModel.addEmployee.call(employeeViewModel, null)}"&gt; &lt;/form&gt; 让你调用“call”方法

标签: knockout.js knockout-2.0


【解决方案1】:
 <script type="text/javascript">
       var viewModel = {       
           numberOfClicks : ko.observable(0),       
           incrementClickCounter : function() {  
                 var previousCount = this.numberOfClicks(); 
                 this.numberOfClicks(previousCount + 1);    
            }  
       }; 
   </script>

http://knockoutjs.com/documentation/click-binding.html 根据淘汰赛文档,如果您还没有,您应该在脚本中定义增量 Click Counter 函数,这是您可以控制“this”值的地方

【讨论】:

  • 感谢您的回复。 'call' 和 'apply' 可以修改上下文。但是你知道如何在淘汰赛“提交”绑定中做到这一点吗?
  • @OmegaSilva 希望对您有所帮助。它似乎是您正在寻找的 wat
  • 不完全是我想要的。我主要是在寻找如何编写“提交”绑定的语法,以便您可以传递不同的上下文。找到答案见我上面的评论。不过感谢您的帮助。
  • @OmegaSilva 很好,我想我发布了通用示例,但是如果您想将该功能从您的 html 中取出来整理内容,您可以在我有的地方定义您的功能。使用表单元素的单个参数,然后在我有“incrementClickcounter”的表单中引用它。但如果它有效,那么嗯
猜你喜欢
  • 2012-08-04
  • 1970-01-01
  • 2014-03-06
  • 2013-01-03
  • 2013-07-08
  • 2013-02-04
  • 2013-03-17
  • 1970-01-01
  • 2020-06-27
相关资源
最近更新 更多