我的问题是,我没有添加$(ele).html('some html')
到我的脚本的位置,因为添加它的时间太早或太晚了。这是我的实际问题:
首先我创建 viemModel
var mainAdmin = function(){
var self = this;
self.pageLanguage = mainAdminDTLanguage;
self.tableData = ko.observableArray([]);
self.dataTable = ko.observable(null);
/*self.tableRowClick = function(data) {
var checkCode = confirm('Vai atzīmēt šo kuponu?');
if(checkCode){
alert(data[0]);
$.ajax({
url: '/api/code/mark/'+data[0],
type: 'GET',
success: function(data) {
console.log(data);
}
});
}
};*/
self.tableOptions = { aaSorting: [["1","desc"]] };
self.dtSelectValue = ko.observable('visus');
self.initLoad = function() {
$.ajax({
url: '/api/item/all',
dataType: 'json',
success: function(data) {
$.each(data, function(index) {
self.tableData.push([this.ID,this.Title, Dateformat('M jS, H:i:s',new Date(this.EndDate)),'<button>Dzēst</button>']);
console.log(this.ID);
});
console.log(data);
}
});
};
self.recentItemLoad = function() {
$.ajax({
url: '/api/item/inactive',
dataType: 'json',
success: function(data) {
self.tableData([]);
$.each(data, function(index) {
self.tableData.push([this.ID,this.Title, Dateformat('M jS, H:i:s',new Date(this.EndDate)),'<button>Dzēst</button>']);
console.log(this.ID);
});
console.log(data);
}
});
};
self.activeItemLoad = function() {
$.ajax({
url: '/api/item/active',
dataType: 'json',
success: function(data) {
self.tableData([]);
$.each(data, function(index) {
self.tableData.push([this.ID,this.Title, Dateformat('M jS, H:i:s',new Date(this.EndDate)),'<button>Dzēst</button>']);
console.log(this.ID);
});
console.log(data);
}
});
}
self.dtSelectValue.subscribe(function(newValue) {
(newValue == 'visus') ? mainViewModel.mainAdminPage.initLoad() : (newValue == 'aktīvos') ? mainViewModel.mainAdminPage.activeItemLoad() : (newValue == 'neaktīvos') ? mainViewModel.mainAdminPage.recentItemLoad() : false
});
};
是的,我知道这有点乱,但实际上我还没有时间优化它
然后我创建 jQuery 的 DataTable 绑定
ko.bindingHandlers.dataTable = {
init: function(element, valueAccessor) {
var options = valueAccessor();
var defaults = {
"aaData": options["data"](),
"bRetrieve": true,
"oLanguage": options["language"],
"bJQueryUI": true,
"sDom": '<"H"l<"dt-toolbar">fr>t<"F"ip>',
"fnRowCallback": function(nRow, aData, iDisplayIndex) {
$(nRow).mouseover(function(){
$(nRow).attr("style","background-color:yellow !important;");
});
$(nRow).mouseout(function() {
$(nRow).removeAttr("style");
});
if(typeof options["rowClick"] === "function") {
$(nRow).click(function() {
options["rowClick"](aData);
});
}
return nRow;
},
};
var tableOptions = $.extend(defaults,options["options"]);
options["object"]($(element).dataTable(tableOptions));
$("div.dt-toolbar")
.html('Rādīt <select data-bind="value: $data.dtSelectValue"><option>visus</option><option>aktīvos</option><option>neaktīvos</option></select> kuponus');
},
update: function(element,valueAccessor) {
var options = valueAccessor();
options["object"]().fnClearTable();
options["object"]().fnAddData(options["data"](),true);
}
};
你可以看到我创建了 $("div.dt-toolbar")
.html('Rādīt <select data-bind="value: $data.dtSelectValue"><option>visus</option><option>aktīvos</option><option>neaktīvos</option></select> kuponus');
@ init
!
然后我创建 mainViewModel 并应用绑定
// --- mainView viewmodel
var mainViewModel = {
indexPage: new indexViewModel(),
itemPage: new itemViewModel(),
catPage: new categoryViewModel(),
companyPage: new companyAdmin(),
mainAdminPage: new mainAdmin()
};
// --Applied bindings
ko.applyBindings(mainViewModel);
现在您可以看到我在应用绑定之后创建了 DataTable,基本上是按以下顺序:
- 视图模型
- 主视图模型
- 自定义绑定
- 创建 HTML
- 将绑定应用到 html
- 创建html
data-bind
问题
- 如何在不进入 int 无限循环的情况下将绑定应用于该确切元素?