将新内容加载到剑道窗口的正确方法是啥?

Posted

技术标签:

【中文标题】将新内容加载到剑道窗口的正确方法是啥?【英文标题】:What is the proper way to load new content into a kendo window?将新内容加载到剑道窗口的正确方法是什么? 【发布时间】:2013-01-08 10:25:24 【问题描述】:

我有一个剑道窗口,里面有一个表格。该表单具有输入元素,其中填充了记录的数据。用户可以关闭窗口并选择不同的记录来查看。当用户这样做时,我需要使用相同的表单但使用不同的记录数据再次显示剑道窗口。这是我目前正在做的事情

    if (!$("#winContainer").data("kendoWindow")) 
        $("#winContainer").kendoWindow(
            modal: true,
            width: "969px",
            height: "646px",
            title: "View Record",
            content: "record.jsp"
        );
     else 
        $("#winContainer").data("kendoWindow").refresh(url: 'record.jsp');
    

    $("#winContainer").data("kendoWindow").center().open();   

该表单包含在 record.jsp 中,我使用之前从服务器收到的 JSON 数据(通过 record.jsp 中引用的 javascript)填充它。我需要确保在表单中填充新记录数据之前不会显示窗口。这是正确的方法还是有更好的方法?

【问题讨论】:

【参考方案1】:

我建议不要每次都创建一个新窗口或刷新其内容:

    创建一个窗口, 每个用户选择一条新记录,将新数据绑定到窗口,然后打开。

这样你只需要加载一次页面。

您还可以考虑将页面 record.jsp 定义为原始页面中的 Kendo UI 模板。

示例:

鉴于以下用户可选择的记录:

var data = [
     text1: "text1.1", text2: "text1.2" ,
     text1: "text2.1", text2: "text2.2" ,
     text1: "text3.1", text2: "text3.2" ,
     text1: "text4.1", text2: "text4.2" 
];

还有一个定义为模板的表单,其 html 如下:

<script id="record-jsp" type="text/x-kendo-template">
    <div>
        <p>This is your form with some sample data</p>
        <label>text1: <input type="text" data-bind="value: text1"></label>
        <label>text2: <input type="text" data-bind="value: text2"></label>
    </div>
</script>

我们的 JavaScript 应该是这样的:

// Window initialization
var kendoWindow = $("<div id='window'/>").kendoWindow(
    title    : "Record",
    resizable: false,
    modal    : true,
    viewable : false,
    content  : 
        template: $("#record-jsp").html()
    
).data("kendoWindow");

将数据绑定到窗口并打开它:

function openForm(record) 
    kendo.bind(kendoWindow.element, record);
    kendoWindow.open().center();

最后用数据调用函数。

openForm(data[0]);

你可以看到它在这个JSFiddle上运行

注意:如果您仍然喜欢使用外部页面,只需将template: $("#record-jsp").html()更改为:url: "record.jsp"

【讨论】:

感谢您向我展示这种方法。它在绑定复杂对象时起作用。使用这种方法需要对我的应用程序进行大量更改,但这绝对值得。我必须很快发布应用程序,所以它必须是下一个阶段的变化。再次感谢。 因此,对于此版本,如果您希望在 record.jsp 中准备最终页面内容,您始终可以添加某种参数,以允许 servlet 决定要呈现的内容。我的意思是,类似record.jsp?arg1=xyz&amp;arg2=yzx&amp;arg3=zxy 感谢您在短期内为我提供了另一种选择和快速响应。我在我原来的方法上做了更多的工作,并认为它对于最初的版本会很好。但是你的方法肯定更好,我会在下一个版本中得到它。我只是希望我(被问到)在我开发的早期就知道你的方法。 @OnaBai:我在我正在开发的网站中使用了类似的东西,但我使用了另一种模板语法(使用#:Property# 表示法)。问题是在创建 kendoWindow 时我得到了一个未捕获的 ReferenceError(“属性未定义”)(这是合理的,因为当时窗口没有绑定到任何 dataItem)。你知道如何避免这种情况吗? 有人注意到滚动窗口似乎没有按预期工作吗?

以上是关于将新内容加载到剑道窗口的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将数组内容保存/加载到文件的最佳方法是啥?

如何设置剑道窗口的内容?

在 iOS 7 上的 UITableView 上指示加载活动的正确方法是啥?

复选框状态在剑道网格的分页上消失

为 UIView 动态创建内容的正确方法是啥?

缓存存档文件的最佳方法是啥?