Java 使用knockout.js和Spring MVC/JSP的初始状态

Java 使用knockout.js和Spring MVC/JSP的初始状态,java,spring,jsp,spring-mvc,knockout.js,Java,Spring,Jsp,Spring Mvc,Knockout.js,我只是想知道怎么做才是最好的。我想加载一个初始页面,该页面将通过JSP生成,这将是我的淘汰视图。但是,接下来必须立即对页面加载执行Ajax请求以获取数据来设置字段值,这似乎是一种耻辱 理想的情况是,如果我可以使用设置的值加载初始视图,然后使用knockout进行初始化。但我不确定这是否可行?我的另一个想法是生成一个空视图,然后在底部放置一个部分,在该部分中编写JSON输出,相当于我试图避免的Ajax请求 肯定是其他人解决了这个问题?在呈现视图时,您可以简单地将json数据模板化为javascri

我只是想知道怎么做才是最好的。我想加载一个初始页面,该页面将通过JSP生成,这将是我的淘汰视图。但是,接下来必须立即对页面加载执行Ajax请求以获取数据来设置字段值,这似乎是一种耻辱

理想的情况是,如果我可以使用设置的值加载初始视图,然后使用knockout进行初始化。但我不确定这是否可行?我的另一个想法是生成一个空视图,然后在底部放置一个部分,在该部分中编写JSON输出,相当于我试图避免的Ajax请求


肯定是其他人解决了这个问题?

在呈现视图时,您可以简单地将json数据模板化为javascript,并让您的knockout访问该数据(或将其传递到viewmodel)


在呈现视图时,您可以简单地将json数据模板化为javascript,并让您的敲除访问该数据(或将其传递到viewmodel)


这是我正在考虑的方法之一。我不确定是否必须在网页上输出JSON,但我猜要么是JSON,要么是ajax调用。这是你的两个选项=PI。看这条线程已经7年多了,但我想知道答案是否有任何不同。我有一个Zend Framework 3/Doctrine2项目,涉及很多jQuery,我认为是时候更好地组织我的Javascript了。我是KO的新手,觉得它很吸引人,但不知道如何开始,例如,当您在视图层中已经将实体作为PHP数据进行“编辑”操作时。将其转换为JSON并呈现,以便KO可以使用它?似乎效率低下(获取、序列化、取消序列化…)。另一个xhr调用只是为了获取数据,您本可以随身携带?bleh.如果您继续通过PHP填充表单,并使用jQuery/KO使用从表单初始状态获取的数据初始化您的模型,该怎么办?@David这是另一种方法。这是一条非常古老的线,哈哈。您当然可以使用隐藏字段填充表单,然后将这些字段映射回视图模型。这与序列化JSON在本质上没有太大区别。在这两种情况下,您都是将数据作为请求的一部分具体化到页面客户端,而不是发出单独的ajax请求来获取数据。从那时起,我又有了6年的经验,我会选择更多的方法来利用ajax来提出请求,并为用户提供更快的初始加载时间,并利用浏览器缓存这是我正在考虑的方法之一。我不确定是否必须在网页上输出JSON,但我猜要么是JSON,要么是ajax调用。这是你的两个选项=PI。看这条线程已经7年多了,但我想知道答案是否有任何不同。我有一个Zend Framework 3/Doctrine2项目,涉及很多jQuery,我认为是时候更好地组织我的Javascript了。我是KO的新手,觉得它很吸引人,但不知道如何开始,例如,当您在视图层中已经将实体作为PHP数据进行“编辑”操作时。将其转换为JSON并呈现,以便KO可以使用它?似乎效率低下(获取、序列化、取消序列化…)。另一个xhr调用只是为了获取数据,您本可以随身携带?bleh.如果您继续通过PHP填充表单,并使用jQuery/KO使用从表单初始状态获取的数据初始化您的模型,该怎么办?@David这是另一种方法。这是一条非常古老的线,哈哈。您当然可以使用隐藏字段填充表单,然后将这些字段映射回视图模型。这与序列化JSON在本质上没有太大区别。在这两种情况下,您都是将数据作为请求的一部分具体化到页面客户端,而不是发出单独的ajax请求来获取数据。从那时起,我又有了6年的经验,我会选择更多的方法来利用ajax发出请求,为用户提供更快的初始加载时间,并利用浏览器缓存
<script type="text/javascript">
    var data = /*INSERT TEMPLATED DATA HERE*/;

    var model = new Model(data);
    ko.applyBindings(model);
</script>
function Model(data, parent)
{
    var self = this;
    self.parent = parent;

    self.Load = function(data) {
        if (data) {
            //initialize data here
        }
    };
    self.Load(data); //call initially here in case of initial state


    //other functionality
}