我在淘汰模型中定义了如下函数。当用户点击列表上的编辑地址按钮时,这将显示地址表单并用选定的地址填充。
this.editAddress = function (address) {
self.addressErrors([]);
self.showAddressForm(1);
self.formAddress(address);
}
但是,此功能在定义时立即运行,并且表单显示在pageload上。我该怎么做才能防止这种情况发生?
这里是带有绑定的列表html(简化)
<ul data-bind="foreach: userAddresses">
<li>
<div>
<p data-bind="text: addressTitle"></p>
<p data-bind="text: nameSurname"></p>
<p>
<span data-bind="text: addressLine1"></span> <span data-bind="text: addressLine2"></span>
</p>
<p><button class="btn btn-default" data-bind="click: $root.editAddress($data)">Edit address</button></p>
</div>
</li>
</ul>
答案 0 :(得分:0)
也许您可以在某个事件上执行操作,例如点击。我对knockout.js不熟悉,但这可能会有所帮助。
祝你好运。答案 1 :(得分:0)
我认为它不会立即执行,我认为你的表单绑定正在执行它。
特别是,这一行:
<p><button class="btn btn-default" data-bind="click: $root.editAddress($data)">Edit address</button></p>
请注意,您的点击约束是$root.editAddress($data)
将您的绑定更改为以下内容:
<p><button class="btn btn-default" data-bind="click: $root.editAddress">Edit address</button></p>
请注意删除($data)
。 click:
需要一个函数引用。
删除($data)
将阻止绑定立即执行您的功能。 (在您导致$root.editAddress
被立即调用之前,它会返回&#39; undefined&#39;,因此您的click:
实际上已绑定到undefined
。)
请注意,淘汰赛会自动将$data
传递给您的功能,因此您不需要做任何棘手的事情。