我有一个自定义绑定。
<div data-bind="autocomplete : { inputStyle : { marginRight : marginR }}"></div>
在我的初始化函数中,我这样做了。我添加了一个需要设置样式的输入框。
$element.append("<input type='text' data-bind='style='" + value.inputStyle + "' />");
我知道这行不通,但请有人帮我做对。
我有一个自定义绑定。
<div data-bind="autocomplete : { inputStyle : { marginRight : marginR }}"></div>
在我的初始化函数中,我这样做了。我添加了一个需要设置样式的输入框。
$element.append("<input type='text' data-bind='style='" + value.inputStyle + "' />");
我知道这行不通,但请有人帮我做对。
这是执行您要求的自定义绑定:
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/
好吧,我真的不明白你想做什么。但有一些评论:
$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 +"'/>")