【发布时间】:2014-06-21 20:59:51
【问题描述】:
我正在尝试使用 knockoutjs 动态创建选择输入。
我的视图是这样的 -
<div data-bind="with: QuestionFilter">
<form>
<div>
<select data-bind="options: categories, optionsText: 'name', optionsValue: 'categoryID', value: selectedCategory">
</select>
</div>
<div data-bind="foreach: details">
<select data-bind="options: subcategories, optionsText: 'name', optionsValue: 'categoryID', value: selectedSubcategory">
</select>
</div>
</form>
</div>
<script type="text/javascript">
ko.applyBindings({
categories = <?php echo json_encode($categories); ?>,
details = ko.observableArray([])
});
</script>
而我的 JS 看起来像这样 -
function QuestionFilter(categories, details) {
var self = this;
self.categories = ko.observableArray(categories);
self.subcategories = ko.observableArray([]);
self.selectedCategory = ko.observable();
self.selectedSubcategory = ko.observable();
self.superSubcategories = ko.observableArray([]);
self.selectedCategory.subscribe(function(category) {
function search(nameKey, myArray){
for (var i=0; i < myArray.length; i++) {
if (myArray[i].parentCategory_id === nameKey) {
self.subcategories.push(myArray[i]);
}
}
}
search(category, categories);
details.push({ firstName: self.subcategories()});
});
self.selectedSubcategory.subscribe(function(subcategory) {
function subsearch(nameKey, myArray){
for (var i=0; i < myArray.length; i++) {
if (myArray[i].parentCategory_id === nameKey) {
self.superSubcategories.push(myArray[i]);
}
}
}
subsearch(subcategory, categories);
details.push({ firstName: self.superSubcategories()});
});
因此,变量selectedCategory 将按预期执行并触发self.selectedCategory.subscribe 中的函数。变量selectedSubcategory 不会按预期执行,而是会引发以下错误 - ReferenceError: selectedSubcategory is not defined。我认为这与在with 绑定中使用foreach 绑定有关,但我不确定。其他一切都按预期工作,我什至使用它成功地将几个对象添加到 details 数组中。
需要任何想法或澄清吗?
【问题讨论】:
-
您的
ko.applyBindings调用看起来不像是有效的语法。 -
嗨,伊斯梅尔,我不得不把东西剪掉一点,所以它很适合这里。我可以向您保证它可以正常工作,因为上面代码中的所有内容都可以正常工作,除了使用
selectedSubcategory.subscribe位。
标签: javascript data-binding knockout.js referenceerror