Javascript 如何在敲除组件中访问viewModel?
我试图在DocumentReady上预先填充一个淘汰组件 我编写了以下代码:Javascript 如何在敲除组件中访问viewModel?,javascript,ajax,knockout.js,Javascript,Ajax,Knockout.js,我试图在DocumentReady上预先填充一个淘汰组件 我编写了以下代码: function Finding(id, trigger) { var self = this; self.id = ko.observable(id); self.trigger = ko.observable(trigger); } function FindingViewModel() { let self = this; self.findings = ko.obse
function Finding(id, trigger) {
var self = this;
self.id = ko.observable(id);
self.trigger = ko.observable(trigger);
}
function FindingViewModel() {
let self = this;
self.findings = ko.observableArray();
self.addFinding = function () {
self.findings.push(new Finding(self.findings().length + 1, ""));
};
self.removeFinding = function (finding) {
self.findings.remove(finding);
ko.utils.arrayForEach(self.findings(), function (value, i) {
self.findings.replace(value, new Finding(i + 1, value.trigger()));
});
};
self.update = function (data) {
var findings = data.findings;
for (var index = 0; index < findings.length; ++index) {
var finding = findings[index];
self.findings.push(new Finding(self.findings().length + 1, finding.trigger));
}
};
}
ko.components.register('finding', {
template: `<table>
<tbody data-bind="foreach: findings">
<tr>
<td><span data-bind="text: id"/></td>
<td><input data-bind="value: trigger"/></td>
<td><a href="#" data-bind="click: $parent.removeFinding">Remove</a></td>
</tr></tbody></table>
<button data-bind="click: addFinding">Add a Finding</button>`,
viewModel: FindingViewModel
});
$(function () {
ko.applyBindings();
$.getJSON("/_get_findings", function (data) {
//findingModel.update(data);
})
});
如何从查找组件访问基础Viewmodel以从getJSON函数内部设置数据?thx to Jeroen解决方案如下所示:
function FindingViewModel() {
let self = this;
self.findings = ko.observableArray();
self.addFinding = function () {
self.findings.push(new Finding(self.findings().length + 1, ""));
};
self.removeFinding = function (finding) {
self.findings.remove(finding);
ko.utils.arrayForEach(self.findings(), function (value, i) {
self.findings.replace(value, new Finding(i + 1, value.trigger()));
});
};
self.update = function (data) {
let findings = data.findings;
for (let index = 0; index < findings.length; ++index) {
let finding = findings[index];
self.findings.push(new Finding(self.findings().length + 1, finding.trigger));
}
};
$.getJSON("/_get_findings", function (data) {
self.update(data);
});
}
如果该组件在页面上被多次使用,您希望发生什么?乍一看,在视图模型构造函数中调用$.getJSON并让它在每个组件实例中执行一次似乎更有意义!ThxAwesome!成功了。非常感谢你!BR JörnGood看到它起作用了。不过要小心,在您发布的确切答案中似乎有一些语法错误。