同步后无法重置语言选择

时间:2018-01-23 10:27:56

标签: kendo-ui kendo-datasource kendo-mvvm kendo-spa

我遇到了一个我不知道如何解决的问题。让我在下面详细描述:

我有一个commonViewModel kendo类,其中写有save,cancel等事件。我遇到了这个类的保存事件的问题。

    save: function () {
    var that = this;
    var routeLanguage = "";
    that._showBackConfirmation(false);
    that.set("isFormSubmitted", true);
    console.log("form is valid, sending the save request!");


    if (vm.get("languageTabsVm.selectedLanguage")) {
        routeLanguage = "/" + vm.get("languageTabsVm.selectedLanguage");
    }
    else if (that.get("model.Languages") && that.get("model.Languages").length > 1) {
        that.get("model.Languages").forEach(function (lang) {
            if (lang.get("IsActive") === true) {
                //sätt cv-visning till det språk jag senast redigerade på detta item
                routeLanguage = "/" + lang.LanguageId;
            }
        });
    }


    //if i call the function _loadDefaultLanguageSelection here, it
    // works. because, the datasource is not synced yet. 


    //Make sure the datasource are syncing changes to the server (includes all crud)
    return that.dataSource.sync().fail(function (e) {

        //i need to do something here to be in the same language tab. But
       //as i am changing directly in to model, it is not possible. But 
       //saving directly to model is essential because that model is 
       //shared to other viewmodel for language tab synching purpose. 
        that.set("isFormSubmitted", false);
        console.log("form rejected");
    }).done(function () {
        if (that.get("isPersonaldetail")) {
            var name = that.get("model.Name");
            if (name.length > 12)
                name = name.substring(0, 11) + "...";
            $("#profileName").text(name);
        }
        that.set("isFormSubmitted", false);

        that.set("isSelected", false);

        // it is called from here right now. but it is failing because
        // model is updated but not synced in that function
        that._loadDefaultLanguageSelection();
        router.navigate(that.nextRoute + routeLanguage);
    });
},
_loadDefaultLanguageSelection: function () {
    var that = this;
    if (that.get("model.Languages") && that.get("model.Languages").length > 1) {
        that.get("model.Languages").forEach(function (lang) {
            if (!that.get("isPersonaldetail")) {
                lang.set("IsActive", lang.get("LanguageId") === vm.get("languageTabsVm.selectedLanguage"));
            }
        });

    }
},

所以,我的问题是,我该如何解决这个问题。一个解决方案是我必须同步两次。这不好。所以,我正在寻找有效的解决方案。

0 个答案:

没有答案