我的背景主要是 asp.net/c#,而且我是 Durandal/Knockout 的新手。我正在尝试构建一个视图以显示对象列表,并在选择一个项目后显示所选项目的数据。我的问题是,无论选择什么项目,返回的数据始终是最后一项的数据。
下面是我的看法,
...未显示标记
<div data-bind="visible: convenios().length > 0" style="height:30px">
Pesquisa retornou <span data-bind="text: convenios().length"></span> conveniados.
</div>
<div class="row-fluid">
<section class="grd-convenio" data-bind="foreach: convenios" style="width:25%; height:300px; overflow-y: scroll">
<article>
<div class="grd-convenio-detalhe" title="Clique para alterar">
<span class="grd-convenio-nome" data-bind="text: nome"></span>
<span class="grd-convenio-id" data-bind="text: id"></span><br/>
<span class="grd-convenio-cidade" data-bind="text: cidade"></span>
<span class="grd-convenio-ativo" data-bind="text: servicosativos"></span>
</div>
</article>
</section>
</div>
和我的视图模型的一部分:
var convenio = function (id, nome, cidade, cnpjcpf, servicosativos) {
self = this;
self.idformatado = ko.observable("[" + id + "]");
self.id = ko.observable(id);
self.nome = ko.observable(nome);
self.cidade = ko.observable(cidade);
self.cnpjcpf = ko.observable(cnpjcpf);
self.servicosativos = ko.observable(servicosativos);
self.estiloativo = ko.computed(function () {
if (self.servicosativos() > 0)
return 'grd-convenio-detalhe-ativo';
else
return 'grd-convenio-detalhe-inativo';
});
self.convenioselecionado = ko.observable("");
return self;
};
var convenios = ko.observableArray([]);
var tamanho = ko.observable("0");
var convenioselecionado = ko.observable("");
var pesquisacodigo = ko.observable("");
var pesquisanome = ko.observable("");
var pesquisacidade = ko.observable("");
var filtrar = function () {
... Retrieve data from Database and pushes data into convenios observablearray
$.each(resultado.pesquisa.retorno, function (i, item) {
convenios.push(new convenio(item.idconveniado, item.nome, item.cidade, item.cnpjcpf, item.servicosativos));
});
};
alterarCadastro = function (selecionado) {
if (selecionado && selecionado.id()) {
alert(selecionado.nome());
}
};
var viewAttached = function(view) {
bindEventToList(view, '.grd-convenio-detalhe', alterarCadastro);
};
var bindEventToList = function (rootSelector, selector, callback, eventName) {
var eName = eventName || 'click';
$(rootSelector).on(eName, selector, function () {
var selecionado = ko.dataFor(this);
callback(selecionado);
return false;
});
};
return {
convenios: convenios,
filtrar: filtrar,
tamanho: tamanho,
pesquisacodigo: pesquisacodigo,
pesquisanome: pesquisanome,
pesquisacidade: pesquisacidade,
alterarCadastro: alterarCadastro,
displayName: 'Convênio',
viewAttached: viewAttached
}
});});
该视图按预期显示,但是当我选择任何项目时,bindEventTolist 函数中返回的数据(ko.datafor)始终是最后一个项目的数据。我究竟做错了什么?这是处理这类应用程序的好方法吗?TIA。