I've written a component called Upload
which allows users to upload files and then report back with a JSON object with these files. In this particular instance, the Upload
component has a parameter which comes from a parent view model:
<upload params="dropzoneId: 'uploadFilesDropzone', postLocation: '/create/upload', uploadedFiles: uploadedFiles"></upload>
The one of importance is called uploadedFiles
. The parameter binding here means I can reference params.uploadedFiles
on my component and .push()
new objects onto it as they get uploaded. The data being passed, also called uploadedFiles
, is an observableArray on my parent view model:
var UploadViewModel = function () {
// Files ready to be submitted to the queue.
self.uploadedFiles = ko.observableArray([]);
};
I can indeed confirm that on my component, params.uploadedFiles
is an observableArray, as it has a push method. After altering this value on the component, I can console.log()
it to see that it has actually changed:
params.uploadedFiles.push(object);
console.log(params.uploadedFiles().length); // was 0, now returns 1
The problem is that this change does not seem to be reflected on my parent viewmodel. self.uploadedFiles()
does not change and still reports a length of 0.
No matter if I add a self.uploadedFiles.subscribe(function(newValue) {});
subscription in my parent viewmodel.
No matter if I also add a params.uploadedFiles.valueHasMutated()
method onto my component after the change.
How can I get the changes from my array on my component to be reflected in the array on my parent view model?