如何引用被淘汰组件改变的元素
How to reference an element that is altered by knockout component?
我正在尝试构建一个可重用的Knockout.js upload
组件,该组件由一个Dropzone.js实例化在表单元素上组成。
改性敲除Upload
组分:
define(['knockout', 'dropzone', 'jquery', 'text!components/upload/upload.html'], function(ko, Dropzone, $, htmlString) {
function UploadViewModel(params) {
var self = this;
self.dropzoneId = ko.observable(params.dropzoneId);
self.postLocation = ko.observable(params.postLocation);
Dropzone.options.uploadedFilesDropzone = {
// Dropzone options here
};
}
var myDropzone = new Dropzone('#' + self.dropzoneId(), { url: self.postLocation() });
return { viewModel: UploadViewModel, template: htmlString };
});
正在使用的模板:
<form method="post" class="dropzone" enctype="multipart/form-data" data-bind="attr: { action: postLocation, id : dropzoneId }">
</form>
<button id="upload">Upload</button>
当我在页面中创建它时:
<upload params="dropzoneId: 'uploadFilesDropzone', postLocation: 'missioncontrol/create/upload'"></upload>
Page require.js script:
require(['common'], function() {
require(['knockout'], function(ko) {
ko.components.register('upload', {require: 'components/upload/upload'});
});
});
可以看到,当我在DOM中创建upload
组件时,我传递了一个ID和一个action HTML属性,这样我就可以自定义每个上传组件的命名(因为它们应该是可重用的,对吧?)
然而,当我创建一个新的Dropzone
时,我在Upload
组件脚本中遇到了一个问题:
var myDropzone = new Dropzone('#' + self.dropzoneId(), { url: self.postLocation() });
问题是,尽管作为params
传递了我想要ID属性的名称,在调用此函数时,主页上的knockout绑定还没有发生,所以无论我做什么,我传递的任何元素ID都不会被定义,并给我这个错误:
Error: Invalid dropzone element.
因为ID为self.dropzoneId()
的元素还不存在,因为绑定还没有应用。
我能做些什么来解决这个问题?
既然我的评论建议起作用了,我就把它作为一个答案写下来。
作为规则,Knockout中的任何DOM操作都应该在绑定中完成。任何需要附加到DOM元素的小部件都应该为它们创建自定义绑定处理程序。这个小部件可以在init
部分创建。
相关文章:
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- 使用AMD时未定义淘汰组件视图模型
- 从淘汰js组件中获取数据
- 带有淘汰SPA的HTML尝试使用组件,绑定不起作用
- 在viewModel之前注册淘汰组件的问题
- 淘汰foreach和模板中的组件
- 如何在淘汰amd组件之间应用过渡效果
- 淘汰3.2 amd组件,不更新可观测值
- 淘汰:可扩展的主题组件
- 淘汰嵌套组件:$(document).ready() ..在加载嵌套组件之前运行
- 淘汰带有命名模板的3.2组件
- 将现有模型传递给淘汰组件绑定
- 将参数传递给淘汰组件
- 淘汰组件更新未被父视图模型订阅的可观察对象
- 如何引用被淘汰组件改变的元素
- 如果元素在模板返回前被移除,则淘汰组件失败