【问题标题】:how to bind a dynamic array model property to a agilityjs object's view如何将动态数组模型属性绑定到 agilityjs 对象的视图
【发布时间】:2013-02-21 09:56:37
【问题描述】:

我使用 agilityjs 作为客户端 mvc 框架。我有一种情况,我有一个 div 元素,它应该显示从服务器端检索并作为模型放在客户端的商家列表。

var merchants = //retrieve merchants from server as json array;
var merchantsWrapper = $$({'merchants':merchants},'<div id="merchants-wrapper"></div>');

现在我需要一种将merchants 模型属性绑定到merchants-wrapper div 的方法,这个div 应该显示所有商家。每个商家都显示在另一个原型 merchant agility object 中定义的特定布局中:

var merchantProto = $$({//model props}, '<div>rendering layout</div>');

我想要一种机制,通过该机制,merchants array 应该以两种方式绑定到merchants-wrapper div,并且每个商家都应该根据merchant prootype 呈现,并且如果merchants 属性通过排序或过滤而被更改视图应相应更新。

我有一个想法,我可以在create 事件上渲染一次,并在change:merchants 事件上做同样的事情,但我不想创建新的商家对象,所以要么应该有一种方法来清除merchants-wrapper div,然后追加新的商家。

【问题讨论】:

    标签: agility.js


    【解决方案1】:

    嗯,我试过了,它对我有用.....

    var merchants = //retrieve merchants from server as json array;
    var merchantsWrapper = $$({'merchants':merchants},'<div id="merchants-wrapper"></div>',
        {
          'create':function(){
               var merchnts = [];
               for (each merchant in merchants){  //its pseudocode plz dnt mind the syntax
                  var merchnt = $$(merchantProto,{//model props});
                  merchnts.push(merchnt); 
               }
               this.model.set({'merchants':merchnts});
           },
    
           'change:merchants':function(){
               this.view.$("#merchants-wrapper").html("");
               for(each merchant in this.model.get('merchants')){
                   this.append(merchant);
               }  
           }
    );
    

    我希望它可以帮助其他人:)

    【讨论】:

    • 我认为与其转到 jQuery 层并直接删除 merchants 中每个更改的 HTML 并使用 this.view.$("#merchants-wrapper").html(""); 行,不如调用 this.empty()。否则,您可能会遇到内存问题,因为 merchant Agility 对象是在每个 change 事件上创建的,但从未正确销毁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2020-10-04
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2023-03-20
    • 2016-04-25
    相关资源
    最近更新 更多