Javascript 如何使用KnockoutJS创建对象的关联数组
我不熟悉knockoutJS,但我正在将这个容器对象存储到一个可观察的数组中。同时,我需要能够通过其唯一id(mmsi)或其名称在数组中搜索特定对象。我假设为了做到这一点,数组必须是关联的,这样你就可以搜索所有的键,直到找到你搜索过的值为止。然而,我对我的建议没有信心,我可以提供一些指导 以下是我所拥有的:Javascript 如何使用KnockoutJS创建对象的关联数组,javascript,object,knockout.js,associative-array,knockout-3.0,Javascript,Object,Knockout.js,Associative Array,Knockout 3.0,我不熟悉knockoutJS,但我正在将这个容器对象存储到一个可观察的数组中。同时,我需要能够通过其唯一id(mmsi)或其名称在数组中搜索特定对象。我假设为了做到这一点,数组必须是关联的,这样你就可以搜索所有的键,直到找到你搜索过的值为止。然而,我对我的建议没有信心,我可以提供一些指导 以下是我所拥有的: 功能容器(数据){ this.mmsi=ko.可观察(data.mmsi); this.lat=ko.可观测(数据纬度); this.long=ko.可观测(数据经度); this.tru
功能容器(数据){
this.mmsi=ko.可观察(data.mmsi);
this.lat=ko.可观测(数据纬度);
this.long=ko.可观测(数据经度);
this.trueheading=ko.可观测(data.trueheading);
}
函数VesselViewModel(){
//资料
var self=这个;
自船=新的可观测航道([]);
self.assoc={};
//操作
self.addVesser=功能(m、lt、lg、th){
自容器。推(新容器)({
m:,
拉特:上尉,
龙:lg,
真实标题:th
}));
};
self.removecasure=功能(容器){
自容器。移除(容器)
};
self.updatevssel=函数(键,项){
if(自关联[键]){
self.assoc[key].值(项)
}否则{
self.vessels.push(VesselViewModel.assoc[键]={
钥匙:钥匙,
价值:可观测(价值)
});
}
}
}
我真的认为您不需要创建关联数组。您可以通过各种类型的绑定直接访问敲除对象。这里有一个简单的解决方案,我花了大约10分钟才搞定
为了进行编辑,因为所有内容都是可观察的,所以只要在行中隐藏/显示表单字段就可以了。完成后,单击“完成”,所有内容都已更新
它至少会给你一个你能做什么的例子
var model;
var data = [{mmsi: '12', lat: '12', long: '12', trueheading: '12'},
{mmsi: '13', lat: '13', long: '13', trueheading: '13'},
{mmsi: '14', lat: '14', long: '14', trueheading: '14'},
{mmsi: '15', lat: '15', long: '15', trueheading: '15'}];
var Vessel = function (datas) {
var self = this;
self.mmsi = ko.observable(datas.mmsi);
self.lat = ko.observable(datas.lat);
self.long = ko.observable(datas.long);
self.trueheading = ko.observable(datas.trueheading);
self.editing = ko.observable(datas.editing || false);
self.editVessel = function() {
self.editing(!self.editing());
}
}
var viewModel = function (datas) {
var self = this;
self.vessels = ko.observableArray(ko.utils.arrayMap(datas, function(vesselItem){
return new Vessel(vesselItem);
}));
self.addVessel = function () {
var newVessel = {
mmsi: '',
lat: '',
long: '',
trueheading: '',
editing: true
};
self.vessels.push(new Vessel(newVessel));
}
self.removeVessel = function (vessel) {
self.vessels.remove(vessel);
}
}
model = new viewModel(data);
ko.applyBindings(model);
这听起来像是一个问题:为什么您认为您需要带有该特定签名的
updatessel
,也就是说,为什么您需要key
作为参数?什么是.value()
函数?还要注意,您调用的是VesselViewModel.assoc[key]
,它与self.assoc[key]
不同。请更新您的问题,包括实际场景/任务/todo的(复制),可能还包括视图代码。谢谢!还有一种方法可以在javascript中修改这些值吗?假设我想更新mmsi=12的lat和long。我有数据={mmsi:'12',lat:'45',long:'56',trueheading:'12'};这是否有可能与击倒?我认为您最好的选择是再次加载数据并“替换”整个当前可观测阵列<代码>var数据是静态的,但我假设您将使用ajax或其他什么?无论哪种方式,您都不需要只更新mmsi:“12”,您可以替换整个船舶阵列。