Knockout.js映射忽略
Knockout.js mapping ignore
我们正在使用knockout.js和knockout.mapping.js。NET MVC 4。假设我有这样的JSON:
{
"deliveryPointType": "0",
"deliveryPointTypes": [
{
"id": 0,
"text": "Pridėti rankiniu būdu"
},
{
"id": 1,
"text": "Siųsti visiems regiono objektams"
}
],
"showRegionSelection": false,
"showDeliveryPointSelection": true,
"regionId": "",
"userHasRegions": "False",
"propertyNames": {
"deliveryPointTypeName": "Pridėti rankiniu būdu"
},
"initialMaterials": [
{
"quantity": 0,
"materialTypeId": "",
"propertyNames": {},
"validMaterial": true,
"showMaterialError": false,
"materialTypeAjax": {
"quietMillis": 300,
"cache": false,
"dataType": "json",
"type": "GET",
"url": "/lt-LT/Material/MaterialTypeNameLookup"
}
}
],
"deliveryBuildings": [
{
"clientId": "1",
"buildingId": "1",
"regionId": "",
"newBuilding": false,
"validClient": true,
"validBuilding": true,
"validRegion": true,
"showClientError": false,
"showBuildingError": false,
"showRegionError": false,
"propertyNames": {
"clientName": "klientas",
"buildingName": "ASD project, Antagynės gatvė, Kaunas, Lietuvos Respublika"
},
"clientAjax": {
"quietMillis": 300,
"cache": false,
"dataType": "json",
"type": "GET",
"url": "/lt-LT/Task/PayerLookup"
},
"buildingAjax": {
"quietMillis": 300,
"cache": false,
"dataType": "json",
"type": "GET",
"url": "/lt-LT/Object/GetClientAddressListByQuery"
},
"regionAjax": {
"quietMillis": 300,
"cache": false,
"dataType": "json",
"type": "GET",
"url": "/lt-LT/Object/RegionNameLookup"
}
}
],
"hasNewBuildings": false,
"showBuildingValidation": false,
"showMinimumBuildingRequiredValidation": false,
"showMaterialValidation": false,
"validRegion": true,
"showRegionError": false,
"regionAjax": {
"quietMillis": 300,
"cache": false,
"dataType": "json",
"type": "GET",
"url": "/lt-LT/Object/RegionNameLookup"
}
}
表单提交失败时(如果服务中出现错误/无效),将使用以前的值重新填充。我们使用$('#BuildingsJSON').val(ko.mapping.toJSON(viewModel.deliveryBuildings))
在表单提交中将ViewModel转换为JSON。
在表单重新填充时,我们使用ko.mapping.fromJSON(deliveryBuildings, mapping, viewModel.deliveryBuildings)();
解析JSON。mapping
目前只是一个空对象(尝试过"忽略",但没有成功)。
我们使用select2字段从列表中选择建筑物的地址(使用ajax)。问题是,fromJSON几乎将每个json属性都填充为可观察的,这是我不需要的。在select2打开时,我们得到一个异常:
未捕获类型错误:对象函数observable(){if(arguments.length>0){//写入
// Ignore writes if the value hasn't changed if (!observable['equalityComparer'] || !observable['equalityComparer'](_latestValue, arguments[0])) { observable.valueWillMutate(); _latestValue = arguments[0]; if (DEBUG) observable._latestValue = _latestValue; observable.valueHasMutated(); } return this; // Permits chained assignments } else { // Read ko.dependencyDetection.registerDependency(observable); // The caller only needs to be notified of changes if they did a "read"
操作return latestValue;}}没有"toUpperCase"方法
我已经调试了ajax调用的类型属性在哪里中断。我认为我们需要将ajax属性从强制转换为可观察属性中排除。
所以,问题是:如何才能不将特定对象的特定属性强制转换为observable()
?使用映射插件是否足够,是否需要额外的插件,甚至是不可能的?
您是否考虑过在映射绑定中使用copy
关键字?这只是将值复制到js属性中,而不是使其成为可观察的。
来自文件:
var mapping = {
'copy': ["propertyToCopy"]
}
ko.mapping.fromJS(data, mapping, viewModel);
- immutable.js与嵌套映射/对象的比较/相等性能
- 如何通过angular JS映射捕捉SVG圆
- 将回车键映射到HTML/CSS/JS中的按钮
- backbone.js-映射标准url参数-使用多个参数
- D3.JS数据映射国家名称变量
- Ember.js+传单+rails(使用Javascript MVC创建rails应用程序并打开源代码映射)
- 不可变的JS映射或列表
- 挖空.js映射导致 IE9 上的无限递归
- HERE 映射 JS API v3 集群提供程序挂起,添加许多数据点
- D3.js在画布和svg中映射缩放行为
- 在 Node.js 视图中创建 OpenLayers 映射
- Knockout.js映射忽略
- 如何使用Immutable.js从javascript原始对象创建记录映射
- 如何将这个Json映射到Handlebars js
- D3.JS树映射不一致的缩放行为
- Three.js将映射分配给object.children[0]会更改整个object's地图
- Knockout JS将我的视图模型创建更改为使用映射pulgin
- 特定键映射 JS
- HERE映射JS API v3:监听' clusteringend '事件
- HERE 映射 JS API v3: 'onceEventListener' 方法 bug