2

EmailField から初期値を取得し、allEmailFields からオプションを取得する選択オプションがあります。

<select data-bind="options: $parent.allEmailFields, value: EmailField()"></select>

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
    }
});
4

1 に答える 1

6

交換:

<select data-bind="options: $parent.allEmailFields, value: EmailField()"></select>

と:

<select data-bind="options: $parent.allEmailFields, value: EmailField"></select>

双方向の依存関係を作成する場合は、バインディング オブザーバブルに渡す必要があります。

PS : http://knockoutjs.com/documentation/observables.html#observables

于 2013-02-28T16:59:44.683 に答える