【发布时间】:2015-01-30 06:16:29
【问题描述】:
我想我有一个非常笼统的问题,但它是针对特定应用程序的。我只是想知道如何在下拉列表上设置一个等于下拉列表初始值的自定义属性。该值将从 KnockOut 视图模型值绑定,但我不想让它永久绑定,因此如果它更改,该属性的值不会更改:
<select data-bind="options: availableSlots, attr: { preset: SlotPosition }, event: {'change', myChangeRoutine} " ></select>
在上面的示例中,preset 是我的属性,我想将其设置为 SlotPosition,它位于我的视图模型中,并且下拉列表最初会自动设置为。 availableSlots 是一个 MVC 服务器端创建的 SelectListItem,它具有插槽 1 到 x 个我作为 ko.observableArray() 返回到我的视图模型中的项目。 (在服务器端代码中,我将 Selected 设置为 true,在需要为给定值设置的位置,并构建选项。)
上面的示例将我的属性preset 绑定到我的模型值SlotPosition,但我只想让它记住该值直到它被更改,而不是永久绑定到它。我遇到的问题是,在myChangeRoutine 中,preset 的值已经成为下拉列表更改为的值。我希望它能够工作,以便当我更改下拉列表的值并运行 myChangeRoutine 时,我可以使用旧值做一些事情。
【问题讨论】:
-
我希望你在这里看到的是小提琴链接 jsfiddle.net/supercool/74dh736s/11
-
我想是的。我将其修改为 jsfiddle.net/navyjax2/Ls5aw9xs 以匹配我在代码中尝试执行的操作。但是由于某种原因,即使它使用您的基线在那里工作,它仍然会将新值设置为
self.SlotPosition()myChangeRoutine在我的实际代码中运行时。所以我按照 Max 建议的方式进行 - 请参阅我的最终代码 jsfiddle.net/navyjax2/7kkuwsLa -
vapcguy你可以以更好的方式(更清洁的方式)实现这一点。检查发布的答案。MaxBrodin提到peek()确实很有用,但在你的情况下,有更好的替代方案来减少代码。
标签: javascript asp.net-mvc knockout.js custom-attributes dropdownbox