在Knockout中访问子元素

时间:2017-12-14 16:00:20

标签: javascript jquery knockout.js

我正在尝试访问此html元素,该元素具有由attr:{id:}

动态设置的ID
<script type="text/html" id="comment">
    <td class="dock-panel-parent">
        <a data-bind="attr:{id: 'commentIcon' + $context.cellContext.status.rowIndex}, click: $parent.toggleCommentSelection" class="fa fa-plus" style="float: right"> </a> 
     </td>
</script>

我试图从另一个函数触发此click事件,但我甚至无法从我的toggleCommentSelection事件之外的任何地方访问此元素的id

    self.handleOkResponse = function () {
        var currentId = self.currentEvent().currentTarget.id;
        var currentIndex;


        currentIndex = currentId.replace(/\D/g,'');
        currentId = 'commentIcon' + currentIndex;

         $('#' + currentId).trigger("click"); 
    };

我检查了id是否正确,但似乎我无法访问它,因为它是嵌套的。有没有办法可以从另一个未绑定到元素的父函数改变它的属性?

1 个答案:

答案 0 :(得分:0)

在父视图模型中,存储此指针。

var self = this;

然后在构造子对象时将self作为参数传递

   self.addFormMenu = function(item) {
    var i;
    self.formMenu([]);
    for (i = 0; i < item.length; i++) {
      self.formMenu.push(new VisFormMenuVm(item[i], self));
    }
    self.activeFormPage(1);
  };

将自我指针存储在孩子中。

 var VisFormMenuVm = function(data, myparent) {
    'use strict';
    var self = this;
    self.parent = myparent;

然后你应该能够对孩子的父母采取行动。

self.parent.searchInput("");

要从viewmodel设置中的任何位置访问对象,您可以执行绝对路径。如果您的绑定是这样的。

viewModel = {

  visualization : new VisualizationVm([], "summary"),
};
ko.applyBindings(viewModel);

您可以在javascript中的任何位置调用此方法,并将所有子对象导航到您要修改的对象。

viewModel.visualization.topicbuilder().aceEditor.getSession().setMode({
        path : "ace/mode/xml",
        v : Date.now()
      });