我有自定义绑定。
<div data-bind="autocomplete : { inputStyle : { marginRight : marginR }}"></div>
在我的init函数中我这样做。我添加了一个我需要设置样式的输入框。
$element.append("<input type='text' data-bind='style='" + value.inputStyle + "' />");
我知道这不行,但请有人帮我做正确的事。
答案 0 :(得分:1)
以下是执行您请求的自定义绑定:
function toStyleStr (obj) {
var result = "";
$.each(obj, function (k,v) {
result += k.toString() + ": " + ko.utils.unwrapObservable(v).toString() + ";";
});
return result;
}
ko.bindingHandlers.autocomplete = {
init: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
$element = $(element);
$element.append("<input type='text' style='" + toStyleStr(value.inputStyle) + "' />");
}
};
var model = {
marginR: ko.observable("10px")
};
ko.applyBindings(model);
这是一个工作小提琴:http://jsfiddle.net/RYnbR/2/
答案 1 :(得分:0)
嗯,我真的不明白你想做什么。但有些意见:
$element.append("<input type='text' data-bind='style='" + value.inputStyle + "' />
不起作用。样式绑定接收具有样式和值的对象:
之类的东西$element.append("<input type='text' data-bind='style:{color:#ff0000}' />");
所以你可以做到
$element.append("<input type='text' data-bind='style:{color:"+value.inputStyle.marginRight +"}'/>");
这假设marginR的颜色为字符串。
但为什么数据绑定呢?你可以这样做:
$element.append("<input type='text' style='color:"+value.inputStyle.marginRight +"'/>")