Quelle est la méthode suggérée pour lier à des données statiques existantes? Je dois l'inclure dans le viewmodel car il est utilisé dans les valeurs calculées.knockout.js lier à des données statiques
<div id="sum" data-bind="text: sum">
</div>
<div class="line">
dynamic: <span data-bind="text: dynamicValue"></span>
static: <span data-bind="text: staticValue">312</span>
<button data-bind="click: getDataFromServer">get data</button>
</div>
<div class="line">
dynamic: <span data-bind="text: dynamicValue"></span>
static: <span data-bind="text: staticValue">123</span>
<button data-bind="click: getDataFromServer">get data</button>
</div>
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]);
Merci de m'indiquer dans cette direction! Que pensez-vous de cela: http://jsfiddle.net/z2ykC/7/ – MatteS
Ok ... si vous voulez vraiment que la valeur soit lue dans innerText voici quelques réglages. 1) J'utilise maintenant le paramètre de chaîne envoyé à la liaison staticText pour définir dynamiquement cette propriété sur viewModel. 2) Je fais l'analyse à l'intérieur de la reliure, au lieu de la somme. 3) J'ai utilisé jQuery pour accéder au texte, car .innerText ne fonctionne pas dans FireFox. 4) staticValue n'a plus besoin d'être observable. http://jsfiddle.net/z2ykC/9/ –
peut-être que cela sort de la portée, mais comment puis-je faire en sorte que la nouvelle liaison fonctionne avec des champs ainsi que des observables? – MatteS