我想創建一種通用控件,我想在我的應用程序中使用。這將是一個標準的手風琴(我用我的Twitter Bootstrap),這取決於我從服務器接收的JSON數據將創建多少手風琴部分。在每個手風琴部分,我想添加一個普通的HTML表格,這個表格也是使用從服務器獲取的JSON數據構建的。 一切都會在客戶端運行,接受Ajax的初始文章以獲取JSON信息。所以我相信某種HTML模板是必需的?添加淘汰賽數據驅動表以淘汰賽數據驅動的手風琴板
所以這就是我到目前爲止。 JSON數據:
var data = {
"d": [
{
"__type": "Warehouse.Tracntrace.Members_Only.DLL.StockMovement.AvailibleStock",
"WarehouseID": 1,
"ProductSKUID": 1,
"ProductSKUName": "Decoder 1132",
"WarehouseName": "SoftwareDevelopmentTest",
"Status": "Staging",
"QtyUnassigned": 10
},
{
"__type": "Warehouse.Tracntrace.Members_Only.DLL.StockMovement.AvailibleStock",
"WarehouseID": 1,
"ProductSKUID": 2,
"ProductSKUName": "Decoder 1131",
"WarehouseName": "SoftwareDevelopmentTest",
"Status": "Staging",
"QtyUnassigned": 5
}
]
};
var data2 = {
"d": [
{
"__type": "Warehouse.Tracntrace.Members_Only.DLL.StockMovement.StockReturnMethod",
"WarehouseID": 1,
"ProductSKUID": 2,
"LotID": 2,
"LotName": "TestLot2",
"AreaID": 8,
"AreaName": "TestArea3L2",
"BinID": 18,
"BinName": "Area8Bin2"
},
{
"__type": "Warehouse.Tracntrace.Members_Only.DLL.StockMovement.StockReturnMethod",
"WarehouseID": 1,
"ProductSKUID": 2,
"LotID": 3,
"LotName": "TestLot3",
"AreaID": 11,
"AreaName": "TestArea2L3",
"BinID": 20,
"BinName": "Area10Bin1"
},
{
"__type": "Warehouse.Tracntrace.Members_Only.DLL.StockMovement.StockReturnMethod",
"WarehouseID": 1,
"ProductSKUID": 2,
"LotID": 4,
"LotName": "TestLot4",
"AreaID": 15,
"AreaName": "TestArea2L4",
"BinID": 24,
"BinName": "Area14Bin1"
},
{
"__type": "Warehouse.Tracntrace.Members_Only.DLL.StockMovement.StockReturnMethod",
"WarehouseID": 1,
"ProductSKUID": 1,
"LotID": 2,
"LotName": "TestLot2",
"AreaID": 8,
"AreaName": "TestArea3L2",
"BinID": 18,
"BinName": "Area8Bin2"
},
{
"__type": "Warehouse.Tracntrace.Members_Only.DLL.StockMovement.StockReturnMethod",
"WarehouseID": 1,
"ProductSKUID": 1,
"LotID": 3,
"LotName": "TestLot3",
"AreaID": 11,
"AreaName": "TestArea2L3",
"BinID": 20,
"BinName": "Area10Bin1"
},
{
"__type": "Warehouse.Tracntrace.Members_Only.DLL.StockMovement.StockReturnMethod",
"WarehouseID": 1,
"ProductSKUID": 1,
"LotID": 4,
"LotName": "TestLot4",
"AreaID": 15,
"AreaName": "TestArea2L4",
"BinID": 24,
"BinName": "Area14Bin1"
}
]
};
我只是用2 AJAX調用從我的服務器得到這一點,你可以看到有2個數據集之間的相似性(它們都可以與彼此ProductSKUID和WarehouseID )。
接下來,我有我的KnockoutJS和標準JQuery,通過使用innerHTML方法創建手風琴並在手風琴內創建HTML表來構建手風琴的功能。
var ProductViewmodel;
//debugger;
//Binds ViewModel
function bindProductModel(Products) {
var self = this;
self.items = ko.mapping.fromJS([]);
ProductViewmodel = ko.mapping.fromJS(Products.d, self.items);
console.log(ProductViewmodel());
}
//Binds First DataSet
function bindModel(vm, data) {
var self = this;
vm.Locations = ko.mapping.fromJS(data.d);
console.log(ProductViewmodel());
}
//Create Table In Accordion PANE based on Data
//This Creates The Table in Each Accordion Pane
function InjectBody() {
var bodyContainer = document.getElementById('injectbody');
var body = bodyContainer.innerHTML;
body = body + '<table class="table table-striped"><thead><tr><th>#</th><th>Lot</th><th>Area</th><th>Bin</th><th>Qty To Assign</th></tr></thead><tbody data-bind="foreach: Locations"><tr><td id="Assign"><input type="checkbox" /></td><td id="Lot" data-bind="text: LotName"></td><td id="Area" data-bind="text: AreaName"></td><td id="Bin" data-bind="text: BinName"></td><td id="QtyToAssign"><input type="text" /></td></tr></tbody></table>';
bodyContainer.innerHTML = body;
}
//Create Accordian Panes
//This Creates The Hyperlink Based On JSON DATA
function BuildLinkFromJSON() {
var link;
link = '<a data-bind="foreach: items" class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapse"><span data-bind="text: ProductSKUName"></span></a>';
//This Creates The Table in Each Accordion Pane
InjectBody();
return link;
}
//Create Accordian Header
//This Creates Each Header in the Accordian
function BuildAccordian() {
//This Creates The Hyperlink Based On JSON DATA
var link = BuildLinkFromJSON();
var eventsContainer = document.getElementById('accordion');
var events = eventsContainer.innerHTML;
events = events + '<div class="accordion-group"><div class="accordion-heading">' + link + '</div><div id="collapseOne" class="accordion-body collapse in"><div class="accordion-inner"><div id="injectbody"></div></div></div>';
eventsContainer.innerHTML = events;
}
//Starting Function
//This Creates the ProductViewModel Binding of both DataSets
$(document).ready(function() {
bindProductModel(data);
bindModel(ProductViewmodel()[0], data2);
ko.applyBindings(ProductViewmodel);
})
那麼它似乎完全失敗,而且我不確定該怎麼做來解決它......我創造了這個Fiddle但沒有輸出,即使給出。任何幫助將不勝感激!!
爲了讓小提琴起作用,您需要添加對「jquery」和「ko.mapping」庫的引用。 – mhu