在通过ajax更新内容并通过.trigger(' contentUpdated')重新初始化内容后,我遇到了一个问题,即observable被触发了。当脚本最初在页面加载时呈现,但是当它们通过ajax添加时,我无法获得更新的observable。出于演示目的,我已经通过逻辑进行了简化,但基本上我有一个块通过ajax加载到产品集合中,如下所示:
myblock.phtml
<div class="wrapper-id-1">
<!-- this is what gets appended via ajax
<div id="product-item-<?php echo $productId;?>">
<span data-bind="text: someObservable()"></span>
...
</div>
<script type="text/x-magento-init">
{
"#product-item-<?php echo $productId;?>": {
"path/to/component":{
"some":"vars"
}
}
</script>
<!--and ajax append ends here -->
</div>
在绑定到我拥有的元素的组件中:
component.js
...
this.someObservable: ko.observable('default value'),
initialize: function () {
var self = this;
this.anotherComponentModel().value.subscribe(function(data){
self.someObservable(data['value']);
},this);
},
...
调用并加载集合的ajax:
ajaxComponent.js
$.ajax({
url: 'route/to/controller?cat=' + categoryId,
success: function (data) {
$('.wrapper-id-' + categoryId).empty().append('<h2>' + categoryTitle + '</h2>' + data).show().trigger('contentUpdated');
}
})
...
我看到组件(component.js)在触发contentUpdate时被初始化,并且它具有所需的所有正确数据。但是,不会触发的观察者和数据不会更新到DOM。这是范围问题?或者我需要重新初始化可观察量?我尝试通过不直接绑定到组件,即:
<script type="text/x-magento-init">
{
// components initialized without binding to an element
"*": {
"<js_component3>": ...
}
}
</script>
但它实现了相同的结果。
我在这里缺少什么。