Javascript 如何在绑定中使用switch语句?
我有一个ViewModel,看起来像:Javascript 如何在绑定中使用switch语句?,javascript,knockout.js,Javascript,Knockout.js,我有一个ViewModel,看起来像: { empName: [ { name: 'NAME1' }, { name: 'NAME2' } ] } 我想根据我的empName显示不同的部门名称,同时使用switch语句在name属性中循环。 使输出为: 第一部门 第二部门 我尝试了以下方法: <ul data-bind="foreach: empName"> <div data-bind="swi
{
empName: [
{ name: 'NAME1' },
{ name: 'NAME2' }
]
}
我想根据我的empName
显示不同的部门名称,同时使用switch语句在name
属性中循环。
使输出为:
第一部门第二部门 我尝试了以下方法:
<ul data-bind="foreach: empName">
<div data-bind="switch: name">
<div data-bind="case: 'Name1'">
Department 1
</div>
<div data-bind="case: 'Name2'">
Department 2
</div>
<div data-bind="case: $default">
</div>
</div>
第一部门
第二部门
但我得到以下输出:
第一部门第二部门
第一部门
第二部门
如何实现这一点?没有开关,但您可以在以下情况下使用:
<div data-bind="foreach: empName">
<div data-bind="if: name == 'Name1'">
Department 1
</div>
<div data-bind="if: name == 'Name2'">
Department 2
</div>
</div>
第一部门
第二部门
为什么不重新思考一下这个问题,将这个逻辑转化为一个函数呢?根据经验,我尽量使绑定尽可能简单,并将逻辑放入javascript中
以下是一个完整的示例:
var viewModel = {
empName: [
{ name: 'NAME1' },
{ name: 'NAME2' }
]
};
viewModel.departmentName = function(name) {
var departmentName = "Department ";
switch (name) {
case "NAME2":
departmentName += "2";
break;
case "NAME1":
default:
departmentName += "1";
break;
}
return departmentName;
}.bind(viewModel);
ko.applyBindings(viewModel);
然后在标记中:
<ul data-bind="foreach: empName">
<li data-bind="text: viewModel.departmentName(name)"></li>
</ul>
我的两分钱!!Knockout没有switch case语句。按照 Michael Best的开关/箱子装订 ()相当灵活 可以让您轻松处理此问题和更复杂的问题(更多状态 而不是真/假) 否则,您可以将条件绑定用作:
<!-- ko if: name == 'NAME1' -->
<div data-bind="if: name == 'NAME1'">Department 1</div>
<!-- /ko -->
第一部门
而且
第一部门
我想知道KO是否有开关箱投标。。。看看图书馆吧。希望这有帮助。借用的示例是将开关盒放在JS中。然后对HTML中的字符串数组执行foreach。@CrimsonChris完全同意。将更冗长/复杂的逻辑排除在绑定之外。我在回答中建议这样做。谢谢。这很有帮助,但它会创建两个额外的空div。输出如下n部门1部门2
<!-- ko if: name == 'NAME1' -->
<div data-bind="if: name == 'NAME1'">Department 1</div>
<!-- /ko -->
<div data-bind="if: name == 'NAME1'">Department 1</div>