【发布时间】:2015-06-08 09:46:40
【问题描述】:
我编写了一个名为Upload 的组件,它允许用户上传文件,然后使用带有这些文件的 JSON 对象进行报告。在这个特定的例子中,Upload 组件有一个来自父视图模型的参数:
<upload params="dropzoneId: 'uploadFilesDropzone', postLocation: '/create/upload', uploadedFiles: uploadedFiles"></upload>
其中最重要的是uploadedFiles。这里的参数绑定意味着我可以在我的组件上引用params.uploadedFiles,并在上传新对象时引用.push()。正在传递的数据,也称为uploadedFiles,是我的父视图模型上的一个 observableArray:
var UploadViewModel = function () {
// Files ready to be submitted to the queue.
self.uploadedFiles = ko.observableArray([]);
};
我确实可以确认,在我的组件上,params.uploadedFiles 是一个 observableArray,因为它有一个 push 方法。在组件上更改了这个值后,我可以console.log() 它来查看它实际上已经改变了:
params.uploadedFiles.push(object);
console.log(params.uploadedFiles().length); // was 0, now returns 1
问题是这种变化似乎没有反映在我的父视图模型上。 self.uploadedFiles() 没有变化,仍然报告长度为 0。
无论我是否在父视图模型中添加self.uploadedFiles.subscribe(function(newValue) {}); 订阅。
无论我是否还在更改后将params.uploadedFiles.valueHasMutated() 方法添加到我的组件中。
如何让组件上的数组中的更改反映在父视图模型上的数组中?
【问题讨论】:
-
您能否发布一个 JSFiddle 或完整的代码示例?我做过类似的事情并且没有遇到问题,但是我无法从您迄今为止发布的代码中找出问题。
标签: javascript knockout.js publish-subscribe