首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >没有初始数据/空表单的Knockout JS映射插件

没有初始数据/空表单的Knockout JS映射插件
EN

Stack Overflow用户
提问于 2011-07-18 23:19:22
回答 2查看 11.2K关注 0票数 18

我们正在使用knockout和knockout映射插件来简化jQTouch web应用程序中的数据绑定。我们使用映射插件的原因是能够使用knockout,而不需要在javascript中手动定义/更改视图模型。当您从服务器/客户端数据库加载初始数据时,映射插件工作得很好。

我们遇到的问题是,我们有一些屏幕/视图,其中可能没有任何初始数据。没有这个初始数据,映射插件就不能‘生成’视图模型(ko.mapping.fromJS)。这意味着我们仍然需要为大部分视图手工定义视图模型。

假设这是映射插件(应该)支持的场景,我是不是错了?我的意思是,这意味着映射插件只有在您始终具有初始数据加载的场景中才可用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-19 02:59:21

除了手动管理视图模型之外,还有几个选项可供选择。映射插件支持create回调,允许您自定义它的创建方式。这可用于向对象添加默认属性(如果这些属性恰好缺失)。

如下所示:http://jsfiddle.net/rniemeyer/WQGVC/

另一种选择是使用创建缺失属性的绑定。它可能看起来像这样:

//create an observable if it does not exist and populate it with the input's value
ko.bindingHandlers.valueWithInit = {
    init: function(element, valueAccessor, allBindingsAccessor, data) {
        var property = valueAccessor(),
            value = element.value;

        //create the observable, if it doesn't exist 
        if (!ko.isWriteableObservable(data[property])) {
            data[property] = ko.observable();
        }

        //populate the observable with the element's value (could be optional)
        data[property](value);

        ko.applyBindingsToNode(element, { value: data[property] });
    }
}

您可以这样使用它(需要将属性作为字符串传递,否则它将出错):

<input data-bind="valueWithInit: 'name'" />

示例如下:http://jsfiddle.net/rniemeyer/JPYLp/

票数 19
EN

Stack Overflow用户

发布于 2013-03-01 07:53:59

我现在正在探索的一种方法是创建一个名为ReturnEmptyObject()的附加web服务方法,该方法除了在服务器端创建并返回一个新实例化的对象(其属性将是默认值)之外,什么也不做。(在我的例子中是C#)对象被序列化为JSON,最后到达jQuery Ajax调用...然后传递给ko.mapping.updateFromJS()...它在初始页面加载时创建所需的观察值...在我调用ko.applyBindings()之前。

当ko.applyBindings()执行时,它会找到所需的可观察对象,这样就不会抛出错误,即使它们大多是空的。

这样,页面最初可以在不填充任何字段的情况下打开。然而,如果我在服务器端向类添加了一些新属性,它们仍然会自动显示在客户端。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6735225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档