将 requirejs 与 JQuery、jQuery Mobile、Knockout 和 Sammy 一起使用以使用外部模板构建结构化应用程序时出现性能/模板问题

2024-01-22

我有一个测试应用程序的设置,其中包括 require.js、jQuery、jQueryMobile (jqm)、knockout 和 sammy

require.js 在 jqm、knockout 和 sammy 中加载

在应用程序主页上,我使用 sammy 加载淘汰赛视图模型。这些视图模型加载到模板中。

所以要显示代码...

需要页面:

require.config({
    jquery:     'vendor/jqm/jquery_1.7_min',
    jqm:     'vendor/jqm/jquery.mobile-1.1.0', 
    knockout: 'vendor/knockout/knockout-2.2.0',
    sammy : 'vendor/sammy/sammy',
    text:       'vendor/require/text',
views:    '../views',
templates:  '../templates'
}

});

define(['app','jqm-config'], function(app) {
   $(document).ready(function() {
  console.log("DOM IS READY");
});    

});

app.js

define(['jquery','knockout', 'sammy','views/home/home', 'views/products/products', 'jqm'],
function($, ko, sammy, appViewModel, productsViewModel) {

var self = this;
self.goHome = function() {
    ko.applyBindings(new appViewModel());
};

self.goProducts = function() {
    ko.applyBindings(new productsViewModel());
};

 Sammy(function() {
    this.get('#home', function() {
       self.goHome(); 
    });

    this.get('#products', function() {
        self.goProducts();
    });

    this.get('', function() {
       self.goHome(); 
    });

 }).run(); 

});

产品页面

define(['jquery', 'knockout','text!templates/test2.html', 'jqm'], 
function($, ko, productsViewTemplate){


function ProductType(id, name) {
var self = this;
self.id = id;
self.name = name;
}

return function productsViewModel() {

  $('body').append(productsViewTemplate); 
  var self = this;
  self.products = ko.observableArray(); 

    var jqxhr = $.getJSON("data/product.json")
    .success(function(data, status, xhr) { 
            self.products.removeAll();    
        $.each(data.data.productTypeList, function(i,item){
           self.products.push(new ProductType(i, item.longName));

        })        
      })
     .error(function() { alert("error"); })
     .complete(function() {

         $.mobile.changePage( '#products', { transition: "pop"});

     });

}
});

产品 html (text2.html)

<div data-role="page" data-theme="c" class="ui-page" id="products">

<div data-role="header" data-position="fixed">
    <h1>Products</h1>
    <a href="#home" data-icon="home" data-iconpos="notext" data-direction="reverse">Home</a>
</div>

<div data-role="content">   
        <ul data-role="listview" data-inset="true"  data-bind="foreach: products" >

          <li>
            <a data-bind="attr:{href:'#products/list/' + id}, text: name"></a>
          </li>


        </ul>

</div>

有几个问题

  1. sammy 应该按这个顺序加载吗,因为当我刷新时,它会时不时地抛出一个错误,因为我猜加载速度太慢,所以 sammy 或 jquery 未定义

  2. 在产品页面上,如果有人从主页访问它,它会正常加载,因为 jQueryMobile changePage 已被调用,但如果用户随后刷新该页面,来自 JSON 的列表将丢失所有样式。

我认为这是由于我从模板渲染页面然后 必须列出清单,但我想不出其他方法。

所以我在想(可能不是最好的解决方案)但是有没有办法在刷新时强制 pageChange ?或者有人有更好的解决方案吗?

3.

这是调用外部模板的最佳方法/是否有更好的方法将模板附加到正文。我真的认为这样做所花费的时间是导致样式问题的原因,而且当我添加下一个级别的产品时,它开始在该页面上呈现它们,然后再移动到下一个。

我正在努力寻找使用淘汰赛和 requirejs 加载外部模板的最佳方法。我想将模板保留为 HTML 格式,以便团队中的其他人可以轻松编辑它并给出结构。

这个演示可以在这里看到

http://demo.stg.brightonconsulting.net.au/templates/tests/knockoutJQMProducts/ http://demo.stg.brightonconsulting.net.au/templates/tests/knockoutJQMProducts/

非常感谢任何帮助


看看您的演示,我可以建议您尝试一些事情。

  1. In main.js删除对的依赖jqm-config并将其添加到app.js。这样,您将始终保证在进行任何操作之前先设置好您的 jquery 移动配置。app.js is run.
  2. 确保您的ko.applyBindings()调用被包装在.ready()构造。
  3. 每次切换页面时,都会将淘汰赛重新绑定到同一节点。这不是最佳实践,可能会导致一些奇怪的行为。如果您打算这样做,请确保首先取消应用绑定。怎么看here http://www.mberkompas.com/2012/11/knockoutjs-unapply-bindings/.

即使所有这些项目都已修复,我也不确定您处理事情的方式是否有效。您最好预先加载所有 HTML 并将所有页面绑定到带有子视图模型的一个父视图模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 requirejs 与 JQuery、jQuery Mobile、Knockout 和 Sammy 一起使用以使用外部模板构建结构化应用程序时出现性能/模板问题 的相关文章

  • 如何将 STRUCT - OR - JSON 传递给 Coldfusion CFC 方法

    我有一个现有的 CFC 在将结构传递到方法中时可以正常工作 问题是 我们现在还需要通过 JSON 将数据传递到同一函数中 这是 CFC 片段
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一
  • 如果选中复选框则显示 div

    我正在尝试构建类似 WordPress 选项的东西 用于在创建文章时切换字段可见性 我所构建的依赖于 click函数使用相应的字段名称切换父项 我想知道如果选中该复选框 执行此操作的最佳方法是什么 因为如果您选中一个框并重新加载页面 因为它
  • Jquery 以编程方式更改

    文本

    编辑 解决方案是将其添加到个人资料页面而不是性别页面 profile live pageinit function event p pTest text localStorage getItem gender 我在列表视图中有一个带有一些文
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当
  • 如何修复 IE6 上的不透明度

    如何修复 IE6 上的不透明度 此代码不适用于 IE6 filter alpha opacity 50 moz opacity 0 5 khtml opacity 0 5 opacity 0 5 还有这段代码 description ani
  • 选中复选框时如何向文本区域添加值

    我正在使用我刚刚在 SO 上找到的以下函数 该函数可以解决我的问题 只有一个问题是 我有一长串选择列表 当用户选中超过 3 4 个复选框时 某些文本或添加到文本区域的值不再可见 有没有什么方法可以让每次选中一个框时添加到文本区域的文本始终可
  • 使用 jquery 单击或更改广播上的事件

    我的页面中有一些收音机 我想在检查的收音机发生变化时执行一些操作 但是代码在 IE 中不起作用 input radio change 在谷歌搜索后 人们建议使用click反而 但这不起作用 这是示例代码
  • 动态突出显示时向

    添加项目符号点?

    Update 例子 p Text Text p 在示例中 是否可以选择第二个 文本 单词 p 元素并单击按钮仅动态添加项目符号点到选定的 单词 有没有可能 在一个 p p Text p 突出显示从 p 元素并添加项目符号点到按钮上动态单击的
  • jQuery 位置 DIV 固定在滚动顶部

    我有一个相当长的页面 在布局的菜单中 有一个弹出菜单 我希望菜单的弹出部分显示在页面顶部 即使用户已将菜单栏滚动到视图之外 这是菜单的 HTML div div Compare up to 3 cards side by side Clic
  • JQGrid - 在编辑表单中显示附加列

    我有一个 JQGrid 表 有 30 多个列 我认为这些列的内联编辑对用户来说并不友好 所以我想在网格模式下显示几列 并仅当用户打开该行的编辑表单时显示所有列 这可能吗 在教程中找不到这个 先感谢您 如果你想show并且不要编辑列 然后使用
  • jquery 调整窗口大小以适合内容

    我有一个简单的弹出窗口显示300x300px图片 我将窗口的大小设置为350x350px 但根据浏览器的不同 我要么得到滚动条 要么得到额外的空白 是否有一些 jQuery 函数可以调整浏览器窗口的大小以适应内容 而无需任何滚动条或空白 无
  • 根据复选框和数据元素隐藏/显示表格行

    我想隐藏表中的行 因为我选中了复选框并且该数据元素在表中不正确 另一个实验 我还可以使用数据元素进行排序并按下拉列表排序 查看 tr 标签 价格 名称 评级 吗 div class filter list div
  • 如何使引导日期选择器只读?

    我正在努力创建嵌入式 内联日期选择器 它不可点击 它应该只显示日期 表现为只读 我正在做的是用模型中选定的日期填充日历 然后我尝试使其不可点击 这样用户就不会认为他可以编辑任何内容 我正在使用 eternicode bootstrap da
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • jQuery 从选择选项切换 div

    我需要从下拉选择选项框中切换 div 我想要它类似于汇编选择 http www ryancramer com projects asmselect examples example1 html对于 jquery 但我不想列出选项标签 而是希
  • 在 jQuery 可排序中对多个选定项目进行排序?

    我试图在 jQuery 可排序集中选择多个项目 然后将选定的项目一起移动 这是我的弱点开始尝试使其发挥作用 http jsfiddle net benstenson CgD8Y 这是代码 HTML div class container d
  • 如何调用 google 的 getBasicProfile() 来仅单击按钮即可登录 google?

    我在我的网站上使用谷歌登录
  • ToggleClass 动画 jQuery?

    我的网站上有一个部分 当用户单击时我希望它展开 我正在使用 jQuerytoggleClass为了这 expandable function e e preventDefault this closest article toggleCla
  • 使用 JQuery 根据下拉列表选择的值显示/隐藏控件

    我正在尝试使用 JQuery 根据下拉菜单的选定索引显示 隐藏 div 标签 但它不起作用 任何帮助将不胜感激 Thanks

随机推荐