初始化敲除从元素的属性值可观察到的(Initialize Knockout observable f

2019-07-30 11:18发布

我有拥有它的价值势必观察到淘汰赛的属性的元素:

<text transform='matrix(1 0 0 1 1 1)' data-bind='attr:{transform:textTransform}'></text>

当元件的负载我想的可观察到包含的DOM元素上定义的值,然而,代替加载为未定义和属性从产品总数的DOM元素删除:

<text data-bind='attr:{transform:textTransform}'></text>

是否有可能初始化淘汰赛从DOM元素属性可观测值和坚持的DOM元素属性的值呢?

更新: http://jsfiddle.net/5Z2SC/10/

Answer 1:

另一种选择是使用自定义绑定,并收集在init功能的元件的电流值。 这是更为可重复使用的,在我看来。

ko.bindingHandlers.transform = {
    init: function(element, valueAccessor) {
        valueAccessor()(element.getAttribute('transform'));
    },
    update: function(element, valueAccessor) {
        var value = valueAccessor();
        element.setAttribute('transform', ko.utils.unwrapObservable(value))
    }
};

当然,你会更加复杂,因为你必须与此转换性质的东西。 这种逻辑可能会想在去update部分。



Answer 2:

数据绑定属性不被解析,直到调用ko.applyBindings()。 所以,如果你需要得到属性数据把你的元素,你可以不喜欢这样。

function MyModel(){
    this.textTransform = ko.observable($('#myElement').attr('transform'));
}

ko.applyBindings(new MyModel());

基本上,你抓住了属性的值,并将其设置为可观察的初始值。 数据绑定属性意味着是一个模板,所以初始或默认值应该在你的视图模型来指定。

另一种选择是写一个定制绑定,可以存储一个缺省的,如果观察到的返回空...



文章来源: Initialize Knockout observable from element attribute value