2
我有一个选择选项,从EmailField及其选项从allEmailFields获取其初始值:Knockoutjs选择值变化不会更新观察到
<select data-bind="options: $parent.allEmailFields, value: EmailField()"></select>
当我改变的值来选择我的模型不得到更新。这不是一种双向约束应该照顾的东西吗?或者我需要为更改事件编写处理程序?
模块是在这里:
define('mods/fieldmapping', ["knockout", "libs/knockout.mapping", "datacontext", "mods/campaigner", "text!templates/fieldmapping.html", "text!styles/fieldmapping.css"],
function (ko, mapping, datacontext, campaigner, html, css) {
'use strict';
var
fieldMappingItem = function (data) {
var self = this;
self.CrmField = ko.observable(data.CrmField);
self.EmailField = ko.observable(data.EmailField);
},
dataMappingOptions = {
key: function (data) {
return data.PlatformFieldName;
},
create: function (options) {
return new fieldMappingItem(options.data);
}
},
fieldMappingViewModel = {
contentLoading: ko.observable(false)
},
showFieldMapping = function() {
campaigner.addStylesToHead(css);
campaigner.addModalInnerPanel(html);
},
init = function (connectionId, connectionName) {
fieldMappingViewModel.fieldMappings = mapping.fromJS([]);
fieldMappingViewModel.allEmailFields = mapping.fromJS([]);
fieldMappingViewModel.originatorConnectionName = ko.observable();
fieldMappingViewModel.originatorConnectionName(connectionName);
fieldMappingViewModel.saveFieldMappings = function() {
console.log(ko.toJSON(fieldMappingViewModel.fieldMappings));
amplify.request("updateExistingFieldMappings",
{
cid: connectionId,
RequestEntity: ko.toJSON(fieldMappingViewModel.fieldMappings)
},
function (data) {
console.log(data);
});
};
showFieldMapping();
amplify.request('getExistingFieldMappings', { cid: connectionId }, function (data) {
amplify.request("getCampaignerFields", function (breezerData) {
mapping.fromJS(breezerData.ResponseEntity, fieldMappingViewModel.allEmailFields);
});
mapping.fromJS(data.ResponseEntity, dataMappingOptions, fieldMappingViewModel.fieldMappings);
ko.applyBindings(fieldMappingViewModel, $('#fieldMapping')[0]);
});
};
return {
init: init,
fieldMappingViewModel: fieldMappingViewModel,
html: html,
css : css
}
});
如果我离开(),那么我从data.EmailField获得初始值,但无法从视图更新它。如果我删除(),那么你是正确的,它更新可观察性,当我改变选定的选项,但我不再获得data.EmailField – XGreen 2013-02-28 17:01:34
@XGreen你确定'data.EmailField'包含数据?初始值应该设置为:http://jsfiddle.net/htCSL/ – Serjio 2013-02-28 17:07:05
是的我确信如果它没有数据我就不会从()中得到任何东西 – XGreen 2013-02-28 17:20:12