zoukankan      html  css  js  c++  java
  • Backbone.VIew 学习笔记

    Backbone.VIew 

    它不影响任何的HTML或CSS代码,并且可以任意javascript模板引擎兼容。

    将界面组织到逻辑视图,之后是模型,当模型数据发生改变,视图立刻自动更新,这一切都不需要重绘页面。

    不必钻进JSON对象中,查找 DOM元素,手动更新HTML,可以绑定视图的render函数到模型的change事件

    创建自定义的视图类。通常我们需要重载render 函数,声明事件,通过tagName,className或id为视图指定根元素

    var DocumentRow = Backbone.View.extend({

      tagName: "li",

      className:"document-row",

      events:{

        "click .icon":    "open",

        "click .button.edit":   "openEditDialog",

        "click .button.delete":  "destory" 

      },

      render:function(){

      }

    });


    constructor/initialize     new View

    每次实例化一个视图时,传入的选项参数会被注册到this.options中以备后用。

    model,collection el  id  className tagName    视图实例化时该函数立即执行。如果不希望创建一个指向DOM


    var doc = Documents.first();


    new DocumentRow({

      model:  doc,

      id:  "document-row-" + doc.id

    });


    el   view.el 

    所有视图都拥有一个DOM元素(el属性),不管元素在不在页面中,可以在任何时候渲染,然后一次性插入DOM中去,这样能尽量减少reflows和repaints从而获得高性能的UI渲染。      this.el  可以从视图的tagName,className,以及id属性创建,如果不都未指定,为一个div.


    如果已存在,直接设置为真实的DOM元素或css选择字符串

    view.$

    每个视图都将拥有$函数,可以在视图元素查询作用域内运行. 等价于运行$(selector,this.el)


    ui.Chapter = Backbone.View.extend({

      serialize: function(){

        return {

          title: this.$(".title").text()

              

        }

      }

    });


    render    view.render

    重新渲染视图模板。使用新的html更新this.el    

    var Bookmark = Backbone.View.extend({

      render: function(){

        $(this.el).html(this.template(this.model.toJSON()));

        return this;

      }

    });


    无论基于什么时候考虑,都永远不要在Javascript中拼接HTML字符串

    remove   view.remove()

    从DOM中移除视图       $(view.el).remove();


    make view.make(tagName,[attribute],[content])

    借助给定的元素类型,经及可选的attributes和HTML内容创建DOM元素。通常用于内部创建初始

    var view = new Backbone.View;

    var el = view.mak("b",{className:"bold"},"Bold!");

    $('#make-demo').append(el);


    delegateEvents   delegateEvents([events])

    采用jQuery的delegate函数来为视图内的DOM事件提供回调函数声明。如果未传入events对象,使用this.events作为为事件源

    视图 渲染 期间使用 delegateEvents 相比用 jQuery 向子元素绑定事件有更多优点。 所有注册的函数在传递给 jQuery 之前已被绑定到视图上,因此当回调函数执行时,this 仍将指向视图对象。 当 delegateEvents 再次运行,此时或许需要一个不同的 events 对象,所以所有回调函数将被移除,然后重新委托 — 这对模型不同行为也不同的视图挺有用处。

    var DocumentView = Backbone.View.extend({
    
      events: {
        "dblclick"                : "open",
        "click .icon.doc"         : "select",
        "contextmenu .icon.doc"   : "showMenu",
        "click .show_notes"       : "toggleNotes",
        "click .title .lock"      : "editAccessLevel",
        "mouseover .title .date"  : "showTooltip"
      },
    
      render: function() {
        $(this.el).html(this.template(this.model.toJSON()));
        return this;
      },
    
      open: function() {
        window.open(this.model.get("viewer_url"));
      },
    
      select: function() {
        this.model.set({selected: true});
      },
    
      ...
    
    });
    
    

    Utility Functions

    oConflictvar backbone = Backbone.noConflict();
    返回 Backbone 对象的原始值。通常用于在第三方网站上引入了多个 Backbone 文件,避免冲突。

    var localBackbone = Backbone.noConflict();
    var model = localBackbone.Model.extend(...);
    


  • 相关阅读:
    Bresenham画线算法
    DDA算法
    GL_LINES & GL_LINE_STRIP & GL_LINE_LOOP
    贝塞尔曲线
    弱引用
    Lambert模型
    ShadowVolume
    Phong Shading
    求反射向量
    Vertex Modifier of Surface Shader
  • 原文地址:https://www.cnblogs.com/yushunwu/p/2296199.html
Copyright © 2011-2022 走看看