我正在尝试访问此html元素,该元素具有由attr:{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是否正确,但似乎我无法访问它,因为它是嵌套的。有没有办法可以从另一个未绑定到元素的父函数改变它的属性?
答案 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()
});