我最近才开始(实际上是我的第一个项目)使用 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>