为什么我的$ parent绑定上下文在Knockout.js foreach模板中是空的?

时间:2015-02-17 09:10:09

标签: javascript html data-binding knockout.js

我通过Knockout调用以下模板:

<script type="text/html" id="uploaded-files-template">
    <li data-bind="text: original_name"></li>
    <pre data-bind="text: ko.toJSON($parent, null, 2)"></pre>
</script>

在foreach循环中被调用:

<ul class="files-list" data-bind="template: { name: 'uploaded-files-template', foreach: uploadedFiles, as: 'uploadedFile' }"></ul>

我尝试从我的模板访问$parent绑定上下文,但我被告知它是undefined,当我尝试输出JSON格式时(正如我上面所做的那样),它是空的。

$uploadedFilesko.observableArray()

self.uploadedFiles = ko.observableArray([]);

通过AJAX填充的内容如下:

enter image description here

然后继续推进:

$.each(message.objects, function(index, object) {
    self.uploadedFiles.push(object);
});

如果我用$parent替换$data,我可以看到正在输出的当前迭代。知道为什么这个$parent没有显示任何内容吗?

2 个答案:

答案 0 :(得分:2)

您的模板和绑定没有任何问题,请参阅正常工作fiddle

var SimpleListModel = function(items) {
    this.uploadedFiles = ko.observableArray(items);    
};

var model = new SimpleListModel([
    { original_name: "One" }, 
    { original_name: "Two" },
    { original_name: "Three" }]
)

ko.applyBindings(model);

在viewModel或viewModel填充中必须是错误的。

答案 1 :(得分:1)

呃...好吧,这很令人尴尬。我的$parent上下文是空的,因为我没有实例化我的ViewModel。我这样做了:

$(document).ready(function() {
    ko.applyBindings(uploadViewModel);
});

当我应该这样做时:

$(document).ready(function() {
    ko.applyBindings(new uploadViewModel());
});

感谢Max Brodin&amp;然而,帮助的超级冷却。