Magento2 Knockout.js contentUpdated在ajax之后没有绑定observable。

时间:2017-08-15 17:51:14

标签: ajax knockout.js magento2

在通过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>

但它实现了相同的结果。

我在这里缺少什么。

0 个答案:

没有答案