gpt4 book ai didi

jquery - Knockout.js:无法解析 JSON 中的绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 02:06:31 27 4
gpt4 key购买 nike

我有一个 View 模型,它通过 AJAX 获取 JSON,并创建一个新任务,但 Knockout 一直给我一个绑定(bind)错误。

如果我直接在 View 模型中对来自服务器的数据进行硬编码,我不会收到任何错误。

我的 View 模型创建了一个新任务,它有一个 id、一个问题和许多替代项,它本身有一个文本和正确的 bool 标志。

下面的代码工作得很好:

function Task(data) {
var self = this;

self.id = data.id;
self.question = ko.observable(data.question);

var alts = new Array();
$(data.alternatives).each(function(index){
alts.push(new Alternative(data.alternatives[index].alternative, data.alternatives[index].correct));
});

self.alternatives = ko.observableArray(alts);
}
function Alternative(alternativeText, correctAnswer) {
var self = this;
self.alternative = ko.observable(alternativeText);
self.correct = ko.observable(correctAnswer);
}
function TaskViewModel() {
var self = this;

var data = {
id: 5,
question: 'test',
alternatives: [{
alternative: 'alt 1',
correct: false
},{
alternative: 'alt 2',
correct: true
},{
alternative: 'alt 3',
correct: false
}]
};

self.task = new Task(data);
}

但是如果我用来自服务器的真实数据交换硬编码的data变量:

function TaskViewModel() {
var self = this;

$.getJSON('/data', function(data){
self.task = new Task(data);
});
}

knockout 给了我这个错误:

Error: Unable to parse bindings.
Message: ReferenceError: Can't find variable: task;
Bindings value: value: task.question

来自 URL 的数据如下所示:

{"id":5,"question":"test","alternatives":[{"alternative":"alt 1","correct":false},{"alternative":"alt 2","correct":true},{"alternative":"alt 3","correct":false}]}

我似乎无法弄清楚为什么这不起作用:/

最佳答案

在应用绑定(bind)时,您的 View 模型实际上并不具有 task 属性。您需要给它一些绑定(bind)的东西。

有几种方法可以解决这个问题。

可能最简单的方法是使 task 可观察并将其设置为 ajax 调用的结果。您可能需要调整绑定(bind)以适应此更改。

function TaskViewModel() {
var self = this;
self.task = ko.observable();

$.getJSON('/data', function(data){
self.task(new Task(data));
});
}

更灵活的选择是为您的 Task 对象添加单独的初始化方法并设置任务(未初始化)。然后作为ajax调用的结果,调用初始化方法对其进行初始化。当然,您必须调整任务对象的初始化代码。

function TaskViewModel() {
var self = this;
self.task = new Task();

$.getJSON('/data', function(data){
self.task.init(data);
});
}

function Task() {
var self = this;
self.id = ko.observable();
self.question = ko.observable();
self.alternatives = ko.observableArray();

self.init = function (data) {
self.id(data.id);
self.question(data.question);
self.alternatives(ko.utils.arrayForEach(data.alternatives, function (item) {
return new Alternative(item.alternative, item.correct);
}));
};
}

关于jquery - Knockout.js:无法解析 JSON 中的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333567/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com