gpt4 book ai didi

Knockout.js:时间输入格式和值限制

转载 作者:行者123 更新时间:2023-12-03 08:47:58 25 4
gpt4 key购买 nike

当我使用 knockout 在我的 View 模型中绑定(bind)数字数据时,它会正确显示,但如果用户更改输入标记值,则会将数据类型更改为字符串。提交字符串的问题是服务器需要一个没有可用隐式转换的数值。

有什么方法可以告诉 knockout 保持原始属性值的数据类型?

我的示例代码将 View 模型名称与输入标签名称相匹配。我使用不显眼的 knockout 来进行绑定(bind),效果很好。

// Bind the first object returned to the first view model object
// FNS is the namespace, VM is the view model
FNS.VM.Items[0] = ko.mapping.fromJS(data.Items[0]);

// For each property found, find the matching input and bind it
$.each(FNS.VM.Items[0], function (indexInArray, valueOfElement) {
var attrName = indexInArray;
var attrValue;
if (typeof valueOfElement == "function")
attrValue = valueOfElement();
else
attrValue = valueOfElement;

var a = $('input[name="' + attrName + '"][type="checkbox"]');
if (a.length)
a.dataBind({ checked: 'VM.Items[0].' + attrName });

var b = $('input[name="' + attrName + '"][type="radio"]');
if (b.length)
b.dataBind({ checked: 'VM.Items[0].' + attrName });

var c = $('input[name="' + attrName + '"][type="text"]');
if (c.length)
c.dataBind({ value: 'VM.Items[0].' + attrName });
});
ko.applyBindings(FNS);

最佳答案

这是一个线程,它使用几种不同的技术来保持数值:https://groups.google.com/d/topic/knockoutjs/SPrzcgddoY4/discussion

一种选择是将此关注点推送到您的 View 模型中并创建一个 numericObservable使用而不是普通的 observable。它可能看起来像:

ko.numericObservable = function(initialValue) {
var _actual = ko.observable(initialValue);

var result = ko.dependentObservable({
read: function() {
return _actual();
},
write: function(newValue) {
var parsedValue = parseFloat(newValue);
_actual(isNaN(parsedValue) ? newValue : parsedValue);
}
});

return result;
};

sample : http://jsfiddle.net/rniemeyer/RJbdS/

另一种选择是使用自定义绑定(bind)来处理这个问题。而不是使用 value绑定(bind),可以定义一个 numericValue绑定(bind)并改用它。它可能看起来像:
ko.bindingHandlers.numericValue = {
init : function(element, valueAccessor, allBindings, data, context) {
var interceptor = ko.computed({
read: function() {
return ko.unwrap(valueAccessor());
},
write: function(value) {
if (!isNaN(value)) {
valueAccessor()(parseFloat(value));
}
},
disposeWhenNodeIsRemoved: element
});

ko.applyBindingsToNode(element, { value: interceptor }, context);
}
};

sample : http://jsfiddle.net/rniemeyer/wtZ9X/

关于Knockout.js:时间输入格式和值限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7395946/

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