从淘汰赛开始,我一直在使用在http://knockoutjs.com/examples/cartEditor.html找到的模式。我有层叠的选择菜单,第二个菜单的选项取决于第一个菜单的状态--到目前为止没有问题。但无论我做什么,我都没有想出一种改变开箱即用的行为的方法,在第一个元素具有真正的ish值之前,第二个元素是不可见的--我可以想象它不是呈现出来的--直到第一个元素有了真正的ish值(除了取出optionsCaption,而是在我的数据顶部填充一个空记录--下面会有更多信息)。标记:
<div id="test" class="border">
<div class="form-row form-group">
<label class="col-form-label col-md-3 text-right pr-2">
language
</label>
<div class="col-md-9">
<select class="form-control" name="language"
data-bind="options: roster,
optionsText: 'language',
optionsCaption: '',
value: language">
</select>
</div>
</div>
<div class="form-row form-group">
<label class="col-form-label col-md-3 text-right pr-2">
interpreter
</label>
<div class="col-md-9" data-bind="with: language">
<select class="form-control" name="interpreter"
data-bind="options: interpreters,
optionsText : 'name',
optionsCaption: '',
value: $parent.interpreter"
</select>
</div>
</div>
</div>代码:
function Thing() {
var self = this;
self.language = ko.observable();
self.interpreter = ko.observable();
self.language.subscribe(function() {
self.interpreter(undefined);
});
};
ko.applyBindings(new Thing());我的样本数据:
roster = [
{ "language": "Spanish",
"interpreters": [
{"name" : "Paula"},
{"name" : "David"},
{"name" : "Humberto"},
{"name" : "Erika"},
{"name" : "Francisco"},
]
},
{"language":"Russian",
"interpreters":[{"name":"Yana"},{"name":"Boris"}]
},
{"language":"Foochow",
"interpreters":[{"name":"Lily"},{"name":"Patsy"}]
},
/* etc */现在,我想出了办法,我可以破解这个问题,并通过
{ "language":"", "interpreters":[] }在我的roster数据结构的前面,这就是我想要做的,除非你们中的一个人可以向我展示我忽略的更优雅的方式。
发布于 2018-04-06 03:31:21
在使用了Knockout和Vuejs之后,我发现Vuejs更容易使用。淘汰赛是有点过时,不再支持任何一个人或团体。
话虽如此,以下是我如何处理您的问题。这里的注释引用的是您提供的链接,而不是您的代码,因此我可以构建自己的测试用例。
我的工作样本在http://jsbin.com/gediwal/edit?js,console,output
https://stackoverflow.com/questions/49682965
复制相似问题