【发布时间】:2015-09-21 16:21:48
【问题描述】:
我最近才开始使用 Knockout(实际上是我的第一个项目),我非常喜欢它。
但是我遇到了一个问题,我似乎无法自己解决。
我有一个在另一个 foreach 循环中运行的下拉选择。
一切看起来都不错,但是当我在其中一个下拉列表中选择时,它会自动在所有下拉列表中选择相同的值。
例如,如果我选择值“删除”,那么该 foreach 中的所有下拉菜单都将在“删除”值上被选中。
我非常感谢您能提供帮助。
这是相关的 JavaScript(FoldersFileBrowserViewModel 中还有更多内容,但我已经删除了多余的代码)和 HTML 代码
提前谢谢你。
/// <reference path="jquery-2.1.4.min.js" />
/// <reference path="knockout-3.3.0.debug.js" />
$(document).ready(function () {
function FoldersFileBrowserViewModel() {
var self = this;
//actions drop down
self.itemActions = ko.observableArray([{ ActionName: 'Remove' }, { ActionName: 'Move' }]);
self.selectedAction = ko.observable();
var subscription = self.selectedAction.subscribe(function (newValue) {
console.log(newValue.ActionName);
//alert(self.selectedAction().ActionName);
/* do stuff */
});
// ...then later...
//subscription.dispose(); // I no longer want notification
}
ko.applyBindings(new FoldersFileBrowserViewModel());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<tbody data-bind="foreach: filesInFolder" style="border-top:none;">
<tr>
<td></td>
<td class="color-blue">
<input type="checkbox" />
<img src="~/Images/icons/Document-copy-icon.png" alt="file" />
<span style="font-weight:500; color:#555;" data-bind="text: FileName"></span>
@*<input type="hidden" data-bind="text: FilePath">*@
</td>
<td></td>
<td>
@*value: $root.selectedAction,*@
<select data-bind="options: $root.itemActions, optionsText: 'ActionName', value: $root.selectedAction, optionsCaption: '- Select Action -'"></select>
<button data-bind="click: $parent.RemoveFile" style="background-color:transparent; border:none;">
<img src="~/Images/icons/window-app-list-close-icon.png" alt="delete file" />
</button>
</td>
</tr>
</tbody>
【问题讨论】:
-
这是您代码中的正确行为。
-
是的,我知道,因为 selectedAction 对所有数组都是可观察的。所以我正在寻找一种方法来让它工作
-
下面是 jsFiddle:jsfiddle.net/oc6fmkkk
-
jsfiddle.net/oc6fmkkk/1 在 filesInFolder 中使用 2 个文件进行测试
-
如果您需要更多帮助,请告诉我。
标签: javascript c# asp.net-mvc knockout.js knockout-3.0