0
我有以下HTML代码,其中引用JavaScript。代码不显示任何错误,但数据不会显示在屏幕上。动态行代使用KnockoutJS
我看到以下没有工作
数据绑定线='选项:AssignResourceView.ResourceViewData
我指这段代码jsfiddle
<table width='100%'>
<thead>
<tr>
<th width='25%'>Resource Type</th>
<th width='25%'>Resource</th>
<th width='10%'> </th>
</tr>
</thead>
<tbody data-bind='foreach: AssignResourceView.GetLines'>
<tr>
<td>
<select data-bind='options: AssignResourceView.ResourceViewData, optionsText: "name", optionsCaption: "Select...", value: "id"'> </select>
</td>
<td data-bind="with: resourceviews">
<select data-bind='options: resource, optionsText: "name", optionsCaption: "Select...", value: $parent.product'> </select>
</td>
<td>
<a href='#' data-bind='click: $parent.removeLine'>Remove</a>
</td>
</tr>
</tbody>
</table>
这个是我的JavaScript代码
var AssignResourceView = function() {
var AssignResourceViewModel =
{
dataFromServer: sampleResourceViews,
lines: ko.observableArray(),
ResourceViewLine: {
resourceviews: ko.observable(),
resources: ko.observable(),
selectedresourceviewId :ko.observable(),
selectedresourceId : ko.observable(),
},
addLine: function()
{
AssignResourceViewModel.lines.push(AssignResourceViewModel.ResourceViewLine)
},
removeLine: function (line) { AssignResourceViewModel.remove(line) },
save : function() {
var dataToSave = $.map(lines(), function (line) {
return line.resourceviews() ? {
resourcename: line.resourceviews().name,
resourceid: line.selectedresourceviewId
} : undefined
});
alert("Could now send this to server: " + JSON.stringify(dataToSave));
},
LoadVM: {
Init: function() {
AssignResourceViewModel.ResourceViewLine.resourceviews.subscribe(function() {
AssignResourceViewModel.ResourceViewLine.resources(undefined);
}),
AssignResourceViewModel.lines = ko.observableArray([AssignResourceViewModel.ResourceViewLine])
},
}
}
return {
//main function to initiate the module
Init: function() {
debugger;
AssignResourceViewModel.LoadVM.Init();
var aR = document.getElementById("assignresourcediv");
ko.applyBindings(AssignResourceViewModel, aR);
},
GetLines:function(){
AssignResourceViewModel.lines();
},
AddLine: function() {
debugger;
AssignResourceViewModel.addLine();
},
RemoveLine: function() {
AssignResourceViewModel.removeLine();
},
Save:function(){
AssignResourceViewModel.save();
},
ResourceViewData:function(){
AssignResourceViewModel.dataFromServer;
},
Model: AssignResourceViewModel
};
}();
我的JSON样品
var sampleResourceViews = [
{
"resource": [
{
"name": "deepak",
"id": 1
},
{
"name": "raju",
"id": 2
}
],
"name": "Vallet",
"id":1
},
{
"resource": [
{
"name": "deepak",
"id": 1
},
{
"name": "raju",
"id": 2
}
],
"name": "Service Specialist",
"id": 2
},
{
"resource": [
{
"name": "deepak",
"id": 1
},
{
"name": "raju",
"id": 2
}
],
"name": "Sales Specialist",
"id": 3
},
{
"resource": [
{
"name": "deepak",
"id": 1
},
{
"name": "raju",
"id": 2
}
],
"name": "Delivery Specialist",
"id": 4
}
];
谢谢,将尝试它并更新此POST。但第二下拉不会加载在你的小提琴中。我的意思是,当我在第一个下拉列表中选择一个项目时,它应该在第二个下拉列表中刷新项目。我已经使用“订阅”功能。 – iShareHappyCode 2014-10-11 21:13:19
这里有一个快速入门,让第二个下拉工作 - http://jsfiddle.net/sifriday/eu95b2mz/5/ – sifriday 2014-10-11 21:55:21
我想你应该看看这个例子:http://knockoutjs.com/examples/ collections.html,并尝试在不使用模块模式的情况下重建代码 - 只需简单地使用视图模型尝试即可。感觉就像因为你不需要的代码而导致KO模式混乱。例如,第二个下拉列表并非真的需要来自订阅,因为数据已经在您的视图模型中,通过您在第一个下拉列表中选择的内容。 – sifriday 2014-10-11 21:58:04