当前位置: 首页 > 面试题库 >

无法使用ko.mapping.fromJSON解析存在视图模型来解析绑定js错误

杨起运
2023-03-14
问题内容

我想将视图模型以JSON格式保存在隐藏字段中。一切正常。

但是,当我尝试获取它时,出现错误:

未捕获的错误:无法解析绑定。消息:ReferenceError:selectAll未定义;绑定值:选中:AllCheck,单击:selectAll

提琴手

viewModel

function AppViewModel() {

//Week
this.AllCheck = ko.observable(false);
this.DaysOfWeekResult = ko.observableArray();

this.selectAll = function () {
    if (this.AllCheck()) {
        viewModel.DaysOfWeekResult.removeAll();

        viewModel.DaysOfWeekResult.push("Mo");
        viewModel.DaysOfWeekResult.push("Tu");
        viewModel.DaysOfWeekResult.push("We");
        viewModel.DaysOfWeekResult.push("Th");
        viewModel.DaysOfWeekResult.push("Fr");
        viewModel.DaysOfWeekResult.push("Sa");
        viewModel.DaysOfWeekResult.push("Su");
    }

    return true;
};

    this.dayClicked = function () {
    checkDays();
    return true;
};

}

初始化代码

var viewModel;    
$().ready(function (){
        viewModel = new AppViewModel();
var viewModelDeserialized = ko.mapping.fromJSON(serializedJsonString, viewModel);

        ko.applyBindings(viewModel);
});


function checkDays() {
    viewModel.AllCheck(viewModel.DaysOfWeekResult().length == 7);   
}

序列化模型

var serializedJsonString = '"AllCheck":false,"DaysOfWeekResult":[]}';

标记

<div class="check-block">
                <input name="AllWeek" id="AllWeek" type="checkbox" value="AllWeek" data-bind="checked: AllCheck, click: selectAll" />
                <label for="AllWeek">All Week</label>
            </div>
            <div class="holder">
                <span>
                    <input name="Monday" id="Monday" type="checkbox" value="Mo" data-day="true" data-bind="checked: DaysOfWeekResult, click: dayClicked" />
                    <label for="Monday">Mo</label>
                </span><span>
                    <input name="Tuesday" id="Tuesday" type="checkbox" value="Tu" data-day="true" data-bind="checked: DaysOfWeekResult, click: dayClicked" />
                    <label for="Tuesday">Tu</label>
                </span><span>
                    <input name="Wednesday" id="Wednesday" type="checkbox" value="We" data-day="true" data-bind="checked: DaysOfWeekResult, click: dayClicked" />
                    <label for="Wednesday">We</label>
                </span>               
                <span>
                    <input name="Thursday" id="Thursday" type="checkbox" value="Th" data-day="true" data-bind="checked: DaysOfWeekResult, click: dayClicked" />
                    <label for="Thursday">Th</label>
                </span><span>
                    <input name="Friday" id="Friday" type="checkbox" value="Fr" data-day="true" data-bind="checked: DaysOfWeekResult, click: dayClicked" />
                    <label for="Friday">Fr</label>
                </span><span>
                    <input name="Saturday" id="Saturday" type="checkbox" value="Sa" data-day="true" data-bind="checked: DaysOfWeekResult, click: dayClicked" />
                    <label for="Saturday">Sa</label>
                </span><span>
                    <input name="Sunday" id="Sunday" type="checkbox" value="Su" data-day="true" data-bind="checked: DaysOfWeekResult, click: dayClicked" />
                    <label for="Sunday">Su</label>
                </span>
            </div>


问题答案:

您正在调用ko.mapping.fromJSON带有错误参数的。

您的情况下的正确用法如下:

var viewModelDeserialized = 
    ko.mapping.fromJSON(serializedJsonString, {} /* empty options */, viewModel);

演示小提琴。(没有绑定错误)

ko.mapping.fromJSON方法的用法有些棘手:

  • 您可以使用 一个参数 来调用它:仅提供数据,例如,var viewModel = ko.mapping.fromJSON(data) 在这种情况下,它将返回创建的viewModel

  • 您可以使用 两个参数 进行调用:

    • 如果第二个参数是ko映射创建的viewModel,则将其视为映射目标 ko.mapping.fromJSON(data, koMappingCreatedViewModel)
    • 否则,第二个参数将被视为映射选项(在您的情况下会发生这种情况) var viewModel = ko.mapping.fromJSON(data, options)
    • 您可以使用 三个参数 明确地指定数据,映射和目标来调用它:ko.mapping.fromJSON(data, options, target)


 类似资料:
  • 我试图按照这个教程从谷歌创建自己的Android应用程序与Android Studio。但是,当我按照这个页面上的第4步:http://developer.android.com/training/basics/firstapp/starting-activity.htmlAndroid Studio结束了这个错误: 这就是我的代码目前的样子: 这个代码怎么了?我对java没有经验,在看了其他问题

  • 所有web应用的MVC框架都提供了视图相关的支持。Spring提供了一些视图解析器,它们让你能够在浏览器中渲染模型,并支持你自由选用适合的视图技术而不必与框架绑定到一起。Spring原生支持JSP视图技术、Velocity模板技术和XSLT视图等。你可以阅读文档的第22章 视图技术一章,里面讨论了如何集成并使用许多独立的视图技术。 有两个接口在Spring处理视图相关事宜时至关重要,分别是视图解析

  • 我正在尝试构建一个基本的MVC应用程序使用spring boot,以Hibernate作为ORM,MySql作为数据库。我面临的问题是jsp视图没有得到解决。 当我尝试使用具有以下URL的get请求获取注册表单时,会出现404错误: 这是我在应用程序中的设置。 目录结构: 用户控制器: 应用程序.属性: 服务器端口:9000 spring.datasource.url:jdbc:mysql://l

  • 我的布局名称是。我还看到了Android-DataBinding-绑定类将如何和何时生成?但这帮不了我。

  • 我正在将一个kotlin库绑定到xamarin android,绑定并解决所有错误后,我得到了一个意外错误,没有任何解释或异常原因, JAVALang.NoClassDefFoundError:“未能解析:Landroidx/viewbinding/viewbinding;” 这是我得到的堆栈痕迹: MAYActivity.cs:40在Android。App.活动。n_OnCreate_Landr

  • MVC提供的配置简化了视图解析器的注册工作。 以下的代码展示了在MVC Java编程配置下,如何为内容协商配置FreeMarker HTML模板和Jackson作为JSON数据的默认视图解析: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override