gpt4 book ai didi

javascript - 如何正确执行数据绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 13:16:27 24 4
gpt4 key购买 nike

我需要将 id 属性分配给元素,然后触发一个函数 witch 将使用这个唯一的 id

HTML:

<div class="item-timeleft" data-bind="id: 'timer'+ID, init: zxcCountDown('timer'+ID, 'message', 20)">
</div>

Javascript:

var data = [];

var viewModel = {
item: ko.observableArray(data)
};
ko.applyBindings(viewModel);

$.ajax({
url: 'api/item/all',
dataType: 'json',
success: function (data) {
var item_array = [];
$.each(data, function (index, item) {
item_array[index] = item;
});
viewModel.item(item_array);
console.log(data);
}
});

额外的 javascript 和自定义绑定(bind):

ko.bindingHandlers.id = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
$(element).attr('id', valueAccessor());
}
};


function zxcCountDown(id, mess, secs, mins, hrs, days) {
var obj = document.getElementById(id);
alert(obj.id);
var oop = obj.oop;
if (!oop) obj.oop = new zxcCountDownOOP(obj, mess, secs, mins, hrs, days);
else {
clearTimeout(oop.to);
oop.mess = mess;
oop.mhd = [mins, hrs, days];
oop.srt = new Date().getTime();
oop.fin = new Date().getTime() + ((days || 0) * 86400) + ((hrs || 0) * 3600) + ((mins || 0) * 60) + ((secs || 0));
oop.end = ((oop.fin - oop.srt));
oop.to = null;
oop.cng();
}
}

当我在控制台中重新触发它时,功能工作得很好,但不知何故我不知道如何分配 id 然后才触发功能。

最佳答案

检查这个 jsFiddle Demo

您可以使用 attr 绑定(bind)来设置您的项目的 id。 attr:{ 'id' : 'TIMER_'+id()}

<span data-bind="delayInit : zxcCountDown  , pId : 'TIMER_'+id() , pMessage : 'Hello' , pSecond : 3 , attr:{ 'id' : 'TIMER_'+id()} , text : 'DEMO'"></span>​

然后定义一个 delayInit 绑定(bind),确保在设置 id 值后调用您的函数。它只是在 SetTimeout 函数中以 0 秒延迟调用您的函数。

var viewModel = {
id : ko.observable(5) ,
zxcCountDown : function(id, mess, secs, mins, hrs, days) {
alert("MESSAGE : "+ mess+ "/ ID : "+id + "/ SECOND : " + secs);
alert("My item value :" + document.getElementById(id).textContent);
}
}

ko.bindingHandlers.delayInit = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var allBindings = allBindingsAccessor() || {};
if(allBindings) {
setTimeout( function() {
valueAccessor()(allBindings.pId,allBindings.pMessage, allBindings.pSecond);
} , 0);
}
}
};

ko.applyBindings(viewModel);

关于javascript - 如何正确执行数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11890530/

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