【问题标题】:Get an object with submit binding of KnockoutJs通过 KnockoutJs 的提交绑定获取对象
【发布时间】:2013-07-09 13:22:43
【问题描述】:

目标

通过 KnockoutJS 的提交绑定获取对象。

问题

当我提交一些表单时,我需要获取对象而不是元素。

Here, on jsFiddle,打开你的控制台,然后点击某个项目的add button。您将收到Products object,这里一切正常。但是here, also in jsFiddle,当您点击add button 时,您的响应将是元素而不是对象——我需要对象。

代码之间的区别

当我添加时看看这个函数:

self.add = function (item) {
    var i = self.products.indexOf(item);
    self.products()[i].isAdded(true);
};

但是,当绑定为submit 时,item 参数与click 绑定返回的响应不同。

我的场景

在我的实际应用程序中,有两个 ViewModel like this。我以为它会更简单,但不幸的是,事实并非如此。

有人知道吗?

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    提交时调用函数时需要传入$data对象。否则会自动传递表单对象。

    例如:

      <!-- ko ifnot:isAdded -->
      <form data-bind="submit: function() { $parent.add($data); }">
      <button data-bind="ifnot:isAdded" class="btn btn-small action add">
          <i class="icon-plus">Add</i>
      </button>
      </form>
      <!-- /ko -->
    

    这是您小提琴的有效更新:http://jsfiddle.net/G8zPT/4/

    【讨论】:

    • 如果add 函数是一个对象的方法呢?例如,Summary.add($data)?我必须做这样的事情吗?:$parent.Summary.add($data) 因为如果是,那就行不通了。
    • 那么您所做的 jsfiddle 中的 add 函数是一个对象的方法,并且有效。也许试试$root.Summary.add($data);。这将从您的视图模型的基础开始工作。您可能在错误的上下文中查找。 (这是 $parent.Summary.add($data) 的工作小提琴:jsfiddle.net/G8zPT/5
    • @GuilhermeOderdenge 你为什么不发布一个带有不起作用的代码的 jsfiddle?
    • 更新了主帖 dhsto。如果可能的话,看看。感谢您的帮助!
    • 您遇到的问题比原来的问题多。这是一个可行的小提琴...做一个差异来查看差异:jsfiddle.net/G8zPT/9——最大的问题是要知道淘汰赛中变量的上下文。此外,请查看对 self.addself.remove 函数的更改。你会发现它要简单得多。
    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2012-12-31
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多