Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js js绑定到静态数据_Knockout.js - Fatal编程技术网

Knockout.js js绑定到静态数据

Knockout.js js绑定到静态数据,knockout.js,Knockout.js,绑定现有静态数据的建议方法是什么?我必须将其包含在viewmodel中,因为它用于计算值 ​ 视图效率低下,最好使用foreach绑定渲染线条。如果需要viewmodel中的数据,则该数据属于viewmodel,或者应该从服务器获取。不要将其放入视图中并将其提取回来 function SumViewModel(lines) { // ... this.lines = lines; } function LineViewModel(staticValue) { // .

绑定现有静态数据的建议方法是什么?我必须将其包含在viewmodel中,因为它用于计算值


视图效率低下,最好使用foreach绑定渲染线条。如果需要viewmodel中的数据,则该数据属于viewmodel,或者应该从服务器获取。不要将其放入视图中并将其提取回来

function SumViewModel(lines) {
    // ...
    this.lines = lines;
}

function LineViewModel(staticValue) {
    // ...
    this.staticValue = ko.observable(staticValue);
}

var staticValues = [312, 123];
var lines = [];

$.each(staticValues, function(index, value) {
    lines.push( new LineViewModel(value) );
});

ko.applyBindings( new SumViewModel(lines) );


您可以考虑创建一个自定义绑定,该绑定将初始化staticValue observable。这是一把小提琴:


是的,虽然我同意这是最佳选择,但我现在没有这个选择。这也不是最简单的选择。谢谢你给我指明了方向!你对此有何看法:好吧。。。如果您真的希望从innerText读取值,这里有几个调整。1) 我现在使用发送到staticText绑定的string参数在viewModel上动态设置该属性。2) 我在绑定内部进行解析,而不是求和。3) 我使用jQuery访问文本,因为.innerText在FireFox中不起作用。4) staticValue不再需要是可观察的。也许这超出了范围,但我如何才能使新绑定既能处理字段又能处理可观察项呢?如果需要,您可以检查staticField的类型。如果是函数,则将其作为函数调用,而不仅仅是设置值:
function SumViewModel(lines){
    this.sum = ko.computed(function(){
        var value = 0;
        $.each(lines, function(index, element){
            var staticValue = element.staticValue();
            if (staticValue)
                value += staticValue;
            var dynamicValue = element.dynamicValue();
            if (dynamicValue)
                value += dynamicValue;
            value += dynamicValue;
        });
        return value;
    });
}

function LineViewModel() {

    this.randomNumber = function(max) {
        return Math.floor((Math.random() * max) + 1);
    };

    this.dynamicValue = ko.observable(0);
    this.staticValue = ko.observable();

    this.getDataFromServer = function() {
        this.dynamicValue(this.randomNumber(300));
    };

};

var lines = [];
$('.line').each(function(index, element) {
    var line = new LineViewModel()
    //line.staticValue(parseInt($('[data-bind*="staticValue"]', element).text()));
    lines.push(line);
    ko.applyBindings(line, element);
});
var sum = new SumViewModel(lines);
ko.applyBindings(sum, $('#sum')[0]);
function SumViewModel(lines) {
    // ...
    this.lines = lines;
}

function LineViewModel(staticValue) {
    // ...
    this.staticValue = ko.observable(staticValue);
}

var staticValues = [312, 123];
var lines = [];

$.each(staticValues, function(index, value) {
    lines.push( new LineViewModel(value) );
});

ko.applyBindings( new SumViewModel(lines) );