Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@italentjs/italent-sidebar

Package Overview
Dependencies
Maintainers
4
Versions
123
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@italentjs/italent-sidebar

iTalent sidebar new

  • 0.6.29
  • latest
  • npm
  • Socket score

Version published
Maintainers
4
Created
Source

TalentJS Framework

本地运行

  • 安装nodejs
  • 安装bower和grunt:npm -g install bower grunt-cli
  • 获取项目源码:git clone <项目地址>
  • 进入项目源码目录;
  • 安装node modules:npm install
  • 安装JS库:bower install
  • 运行项目:grunt server在本地8000端口启动server,并在默认浏览器打开起始页面;

编码规范

  • 文件命名: 小写,中划线分隔;
  • 文件格式:utf-8无BOM;
  • 代码缩进:tab, 4个空格的大小;
  • 变量:驼峰式写法,如: userName;
  • 类名:头字母大写,如:UserModel;
  • MVC所涉及的类,需要增加类型后缀,如:DetailView, JobsPageView, UserCollection;
  • 文件命名: 小写,中划线分隔,如: user-item-view.js, user-model.js;
  • 页面视图类的文件名全部为index-page-view.js;
  • 普通视图类的文件名全部为“-view.js”结尾;
  • 对于this的别名,请使用:var self = this;

主要视图类的详细说明

ItemView

简述

用于简单地渲染一个模板。 其render方法会将模板与数据绑定,并将结果渲染至$el中。

使用示例

MyView=Talent.ItemView.extend({
    template: jst['home/index-page']
});

属性

ui

一组hash表,获取view对应模板内的dom元素。 如下例所示,render前,this.ui.checkbox为字符串;render后,为jquery对象。

ui:{
    checkbox:"input[type=checkbox]"
},
,events:function(){
    var events = {};
    events['click ' + this.ui.checkbox] = 'clickHandler';
    return events;
}
onRender: function() {
    if (this.model.get('selected')) {
        this.ui.checkbox.addClass('checked');
    }
}
modelEvents

对model中发生的事件绑定相应的事件监听函数。

modelEvents: {
    "change":"modelChanged"
}
collectionEvents

对collection中发生的事件绑定相应的事件监听函数。

collectionEvents: {
    "add":"modelAdded"
}

方法

serializeData

该方法用于处理向模板中传入的数据,它的返回值必须为json对象。 ItemView传入的model或collection数据不适合直接渲染时,可用该方法。

serializeData: function(){
    return {
        "some attribute": "some value"
    }
}

方法回调

onRender

该方法在render后执行。你可以向其中加入你希望在view render之后执行的代码。

CompositeView

简述

包含一个模板和一个可迭代区域。可迭代区域中的每个条目由ItemView负责渲染。

使用示例

var MyItemView = Talent.ItemView.extend({
    template : Talent._.template('<li><%=text%></li>')
});
Talent.CompositeView.extend({
    template : '<h1>Hello</h1><ul></ul>',
    itemViewContainer : 'ul',
    itemView: MyItemView
});

属性

itemView

用于指定渲染每个迭代条目的视图类,其必须是ItemView的子类;必选参数;

itemViewContainer

用于指定迭代区域。该方法指定一个DOM节点,用来包含所有迭代条目。必选参数。

itemViewOptions

从compositeView中传入到itemView中的参数。

var MyItemView = Talent.ItemView.extend({
    initialize: function(options){
        console.log(options.foo); // => "bar"
    }
});

Talent.CompositeView.extend({
    template : jst['common/todo-composite'],
    itemViewContainer : 'ul',
    itemView: MyItemView,
    itemViewOptions : {
        foo : "bar"
    }
});

当itemViewOptions中的值需要在运行时通过计算得出时,它也可以被定义为一个函数,必须返回一个对象。

Talent.CompositeView.extend({
    itemViewOptions: functioin(model, index){
        // 计算部分
        return {
            foo: "bar",
            itemIndex: index
        }
    }
});
emptyView

collection为空时在compositeView内渲染的视图类。

children

获取compositeView中所有的itemView

方法

buildItemView

自定义itemView的实例化过程。

buildItemView: function(item, ItemViewType, itemViewOptions){
    // 为ItemView构建最终的参数列表
    var options = _.extend({model: item}, itemViewOptions);
    // 实例化
    var view = new ItemViewType(options);
    return view;
}
appendHtml

自定义itemView实例插入到dom结点的过程。 默认情况下,compositeView把每个itemView添加到缓存元素中,在最后通过jQuery的.append方法把所有itemView添加到compositeView的el中。

Talent.CompositeView.extend({
        //第一个参数是compositeView实例,
        //第二个参数是当前itemView实例,
        //第三个参数itemView对应的model在collection中的序号。
    appendHtml: function(compositeView, itemView, index){
        if (compositeView.isBuffering) {
            //在事件重置和初始化渲染时缓存,减少向document插入元素的次数
            compositeView.elBuffer.appendChild(itemView.el);
        }
        else {
                        //如果compositeView已经被渲染,
                        //直接把新的itemView添加到compositeView中
            cmopositeView.$el.append(itemView.el);
        }
    }
});
close

close方法执行以下操作 :

  • 解除所有listenTo事件
  • 解除所有自定义view事件
  • 解除所有DOM事件
  • 解除所有已渲染的item views
  • 从DOM中移除this.el节点
  • 如果设置了onClose事件回调函数,调用onClose函数

事件回调

onRender

view渲染完成后,对view对应的dom结构进行其它操作。

onClose

在view close后执行。

onBeforeItemAdded

item实例即将被添加到compositeView之前执行。

onBeforeItemAdded: function(itemView){
    //操作代码
}
onAfterItemAdded

item实例被添加到compositeView之后执行。

onAfterItemAdded: function(itemView){
    //操作代码
}
onItemRemoved

当item实例从compositeView中移除时执行。

onItemRemoved: function(itemView){
    // 操作代码
}

事件

以下事件函数在相应事件发生时被调用。

render
closed
before:item:added
after:item:added
item:removed
MyView = Talent.CompositeView.extend({...});

var myView = new MyView();

myView.on("render", function(){
    alert("the collection view was rendered!");
});

myView.on("colsed", function(){
    alert("the collection view was closed!");
});
var MyCV = Talent.CollectionView.extend({
    // ...

    onBeforeItemAdded: function(){
        // ...
    },

    onAfterItemAdded: function(){
        // ...
    }
});

var cv = new MyCV({...});

cv.on("before:item:added", function(viewInstance){
    // ...
});

cv.on("after:item:added", function(viewInstance){
    // ...
});

cv.on("item:removed", function(viewInstance){
    // ...
});

Layout

简述

具有若干可局部刷新的区域(region)

使用示例

MyLayout = Talent.Layout.extend({
  template: "#my-layout-template",
  regions: {
    menu: "#menu-bar",
    content: "#main-content"
  } 
});
var myLayout = new MyLayout();
myLayout.render();
//myMenu在这里可以是ItemView或CompositeView的实例
myLayout.menu.show(myMenu);

属性

regions

定义Layout中的Region。通过函数定义,该函数返回一个定义Region的对象。

regions: function(options){
    return {
        fooRegion: "#foo-element"
    };
}

方法

show

渲染view并将它添加到el元素中。

addRegion

向Layout中添加Region,一次只能添加一个。

var layout = new MyLayout();

// ...

layout.addRegion("foo", "#foo");
addRegions

向Layout中添加Region,一次可以添加多个。

var layout = new MyLayout();

// ...

layout.addRegions({
    foo: "#foo",
    bar: "#bar"
});
removeRegion

移除Layout中的Region。

var layout = new MyLayout();

// ...

layout.removeRegion("foo");

自定义Region Type

用于将默认的Region类替换为你自定义的Region类。

MyLayout = Talent.Layout.extend({
    regionType: SomeCustomRegion
});

也可以分别向每个region设置不同的Region类。

AppLayout = Talent.Layout.extend({
    template: "#layout-template",

    regionType: SomeDefaultCustomRegion,

    regions: {
        menu: {
            selector: "#menu",
            regionType: CustomRegionTypeReference
        },
        content: {
            selector: "#content",
            regionType: CustomRegionType2Reference
        }
    }
});

Region

简述

需要经常变动内部视图的区域。其最重要的特性为在改变内部视图后旧视图会从DOM中移除。

使用示例

AppLayout = Talent.Layout.extend({
    template: "#layout-template",

    regions: {
        menu: "#menu",
        content: "#content"
    }
});
var layout = new AppLayout();
layout.render();
layout.menu.show(new MenuView());
layout.content.show(new MainContentView());

属性

currentView

设置绑定到Region中的view。该view不会渲染或显示。

var myView = new MyView({
    el: $("#existing-view-stuff")
});

var region = new Talent.Region({
    el: "#content",
    currentView: myView
});

方法

show

渲染并将view添加到DOM树中。每次调用show方法时会自动调用close关闭旧view。可以通过{preventClose: true}参数阻止close行为。

// 显示myView
var myView = new MyView();
MyApp.mainRegion.show(myView);

// anotherView替换掉myView。自动调用close方法
var anotherView = new AnotherView();
MyApp.mainRegion.show(anotherView);

// anotherView2替换anotherView。阻止调用close方法
var anotherView2 = new AnotherView();
MyApp.mainRegion.show(anotherView2, { preventClose: true });
reset

自动关闭所有显示的view并删除缓存的el元素。region下一次显示view时,el重新从DOM中获取。

open

改变视图添加到region中的过程。 默认的open方法为:

Talent.Region.prototype.open = function(view){
    this.$el.empty().append(view.el);
}

重写open方法添加其它效果

Talent.Region.prototype.open = function(view){
    this.$el.hide();
    this.$el.html(view.el);
    this.$el.slideDown("fast");
}
attachView

向Region中添加view,添加的view不会渲染或显示。

MyApp.addRegions({
    someRegion: "#content"
});

var myView = new MyView({
    el: $("#existing-view-stuff")
});

MyApp.someRegion.attachView(myView);

事件

beforeShow

当view已经渲染完成,但是尚未添加到DOM中时调用。

show

view渲染完成并添加到DOM中后调用。

close

当view被关闭之后调用。

MyApp.mainRegion.on("before:show", function(view){
  // manipulate the `view` or do something extra
  // with the region via `this`
});

MyApp.mainRegion.on("show", function(view){
    // manipulate the `view` or do something extra
    // with the region via `this`
});

MyApp.mainRegion.on("close", function(view){
    // manipulate the `view` or do something extra
    // with the region via `this`
});

MyRegion = Backbone.Marionette.Region.extend({
    // ...

    onBeforeShow: function(view) {
        // the `view` has not been shown yet
    },

    onShow: function(view){
        // the `view` has been shown
    }
});

MyView = Talent.ItemView.extend({
    onBeforeShow: function() {
        // called before the view has been shown
    },
    onShow: function(){
        // called when the view has been shown
    }
});
实例化自定义Region

当我们想在应用运行之后向其中添加region时,就要按照上文中的方法扩展Region类,并在应用中实例化,如下所示:

var SomeRegion = Talent.Region.extend({
    el: "#some-div",

    initialize: function(options){
      // your init code, here
    }
});

MyApp.someRegion = new SomeRegion();

MyApp.someRegion.show(someView);

注意region必须要有一个元素与自身绑定,如果在添加region实例到应用或Layout中时没有指定选择器的话,在定义时也必须声明el属性。

添加自定义Region Types

通过addRegions将自定义Region Type添加到应用中。

var FooterRegion = Talent.Region.extend({
    el: "#footer"
});

MyApp.addRegions({
    footerRegion: FooterRegion
});

也可以在添加时声明一个选择器。

var FooterRegion = Talent.Region.extend({
    el: "#footer"
});

MyApp.addRegions({
    footerRegion: {
        selector: "#footer",
        regionType: FooterRegion
    }
});

FAQs

Package last updated on 19 Aug 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc