在Knockout.JS中设置选择列表值

时间:2014-01-30 01:24:55

标签: javascript jquery json knockout.js

我正在尝试使用从jQuery GET请求中检索的JSON数据填充输入表(文本框和选择列表)。对于示例,我使用一些数据预先设置变量,而不是生成get请求。文本框输入正确填充数据,但不会填充选择列表。

以下是敲除接收并放置在表格中的数据的示例

var returnedData = [{
    "taskID": "1",
    "taskName": "test task",
    "taskDetails": "details",
    "employee": {
        "employeeID": "1",
        "employeeName": "John"
    }
}, {
    "taskID": "2",
    "taskName": "another test",
    "taskDetails": "some more details",
    "employee": {
        "employeeID": "2",
        "employeeName": "Jane"
    }
}];

在官方淘汰教程中,他们使用textarea(我将其包含在小提琴中)来显示数据在被发布回服务器时的格式。预加载的数据格式完全相同。

无论如何,here is a fiddle带有代码。

1 个答案:

答案 0 :(得分:1)

选择列表不会填充的原因是对象相等。它们绑定到带有选项绑定的availableEmployees observable数组,并且值绑定是Employee,但是当您设置每个任务的employee属性时,您将其设置为具有相同属性和值的新对象,在javascript中不相等。我所做的实际上是搜索(我的例子有一个可怕的循环搜索,只是为了告诉你我的意思)为你的可用员工列表中的匹配员工,并将员工设置为该实际对象,而不是即将到来的对象从任务的信息。看看这个:

var returnedData = [{         
    "taskID": "2",
    "taskName": "test task",
    "taskDetails": "details",
    "employee": self.availableEmployees()[1]
}, {
    "taskID": "5",
    "taskName": "another test",
    "taskDetails": "some more details",
    "employee": self.availableEmployees()[2]
}];

这是因为在javascript中:

var a = { foo: 1, bar: 'baz'};
var b = { foo: 1, bar: 'baz'};
console.log(a == b); // false

JSFiddle