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