我正在尝试构建一个三步下拉系列.我能想到的最简单的例子是构建一年/制造/模型下拉集.
我试过跟随这个例子并使用另一个小提琴(另一个小提琴url以jsfiddle.net/rniemeyer/V2gvT/结尾),但是我遇到了数据绑定问题.
我的小提琴有一个使用年份/品牌/模型对象的静态列表,年份列表正确绑定,但永远不会将品牌/模型列表添加到数据绑定.
简单标记
<label for="ddlYear">Year</label>
<select id="ddlYear" data-bind="options: years, value: selectedYear"></select>
<label for="ddlMake">Make</label>
<select id="ddlMake" data-bind="options: makes, value: selectedMake'"></select>
<label for="ddlModel">Model</label>
<select id="ddlModel" data-bind="options: models"></select>
Run Code Online (Sandbox Code Playgroud)
脚本
var viewModel = {
selectedYear: ko.observable(""),
selectedMake: ko.observable(""),
selectedModel: ko.observable("")
};
viewModel.years = ko.dependentObservable(function() {
return Enumerable.From(makeModelList).Select(function(it) {
return it.year;
}).OrderBy(function(it) {
return it.year;
}).Distinct().ToArray();
}, viewModel);
viewModel.makes = ko.dependentObservable(function() {
var selectedYear = this.selectedYear();
return Enumerable.From(makeModelList).Where(function(it) {
return it.year == selectedYear;
}).Select(function(it) {
return it.make;
}).ToArray();
}, viewModel);
viewModel.models = ko.dependentObservable(function() …Run Code Online (Sandbox Code Playgroud) 这更像是一个关于javascript如何工作的思考,而不是修复的实际问题.在类似声明的情况下
var str = 9 + " some words here";
Run Code Online (Sandbox Code Playgroud)
结果str var将包含值"9 some words here".我的问题是javascript使用什么函数来自动将Number对象'9'强制转换为一个字符串,以便与String对象"这里的一些单词"连接,并且这个函数是可更改/可重写的.
这开始于我需要在页面上输出前一个0的单个数字.这很容易通过Number对象上的快速原型函数来完成
Number.prototype.SpecialFormat = function() {
if(this < 10) {
return "0" + this;
}
else {
return this.toString();
}
};
Run Code Online (Sandbox Code Playgroud)
并简单地称呼它 (9).SpecialFormat() + " words here";
但这让我想知道我是否可以使用a覆盖Number上的toString函数
Number.prototype.toString = function() {
if(this < 10) {
return "0" + this;
}
else {
return this;
}
};
Run Code Online (Sandbox Code Playgroud)
,只是让javascripts自动转换为我处理它,所以我可以使用标准9 + " words here";来获得相同的结果"09 words here".这不仅仅是隐含的工作,我不得不最终将.toString添加到9 (9).toString() + " words here"(进一步看,会导致一些无限循环).
那么有没有办法覆盖javascript本机类型的内置功能?
*注意:我意识到这可能是" 最坏的想法 "