我有一个动态生成的表,基于从数据库中检索的数据,因此我来自数据库的对象列表如下所示:
public string Account { get; set; }
public string Description { get; set; }
public decimal A2Year { get; set; }
public decimal A1Year { get; set; }
public decimal B1Year { get; set; }
public decimal Current { get; set; }
public decimal Proposed { get; set; }
public IEnumerable<CustomerInfo> UserSalaries { get; set; }
我使用$ .ajax get函数检索此数据,因为它是一个列表,我按以下方式生成表:
<tbody data-bind="foreach: accountData">
<tr class="dept-row" role="row">
<td><span data-bind="text: Description"></span></td>
<td><span data-bind="text: Account"></span></td>
<td class="center-text"><a data-bind="click: function(){ $parent.showNoteDialog(Account)}"></a></td>
<td class="align-right"><span data-bind="text: A2Year"></span></td>
<td class="align-right"><span data-bind="text: B1Year"></span></td>
<td class="align-right"><span data-bind="text: A1Year"></span></td>
<td class="align-right"><span data-bind="text: Current"></span></td>
<td><input class="align-right dollar-amount" data-bind="textInput: Proposed" /></td>
</tr>
</tbody>
表格是正确生成的,在我的视图模型中,我只有以下行:
self.accountData = ko.observableArray();
我想要实现的目标,我是KnockoutJS的新手,当时是&#34;提议&#34;输入值更改,我想调用$ .ajax函数将此值保存到数据库中。我已阅读并尝试使用绑定&#34; hasFocus&#34;所以我可以在离开字段时调用ajax,但是如果我添加hasFocus绑定,我无法生成表,因为那时所有输入字段都具有完全相同的绑定。任何建议如何实现这一目标?建议的值应该在其自己的可观察数组中,还是跟踪整个对象列表是否足够好?最终的问题是如何在数据更改时调用ajax函数来保存数据。
答案 0 :(得分:0)
如果我理解正确,您有以下要求:
Proposed
的值更改时调用ajax函数。Proposed
的输入字段失去焦点时才会调用。正确?
在这种情况下,您需要进行以下更改:
Proposed
与&#39; textInput&#39;的数据绑定与data-bind="value: Proposed"
中的价值相同。 Proposed
本身是可观察的时,绑定才有效。实际上,您的所有值都需要是可观察的 IF 它们将会发生变化,您需要动态地在UI中反映这些变化。您可以在observables数组中使用observable。Proposed
的值发生变化时调用ajax函数,您需要订阅&#39;为此,你可以倾听它的变化。基本方法 - 使用subscribe
功能:
self.Proposed.subscribe(function(newValue){
//call ajax
});
高级,更有条理的方式 - 使用extenders。