fish模块化

0x00 模块化开发

    首先需要引入模块化js用来处理模块化的加载开发

    <script type="text/javascript" src="frm/fish-desktop/js/fish-desktop-require.js" data-main="main.js?v=1.0.0"></script>

然后需要进行主视图IndexView.js的渲染,之后就可以定义模块了

define(['./person'], function (person) {
  return {
    echo: function () {
      console.log(person.getName());
    }
});

定义需要依赖的模块

define(['./person'], function (person) {
  return {
    echo: function () {
      console.log(person.getName());
    }
});

使用require引入模块

require(['./a, ./b'], function (a, b) {
  // do something
});

by the way,define定义的模块主要用来声明国际化文件,接口层的方法以及一些第三方脚手架或者模版插件。

0x01 模板语法

    fish模板语法基于Handlebars,这里使用视图组件进行演示

    首先是变量赋值,变量赋值使用{{}}

fish.View.configure({ manage: true, syncRender: true });
// 定义一个模板
var template = '<div class="entry">\n' +
    '  <h1>{{title}}</h1>\n' +
    '  <div class="body">\n' +
    '    {{body}}\n' +
    '  </div>\n' +
    '</div>\n';
// 定义一个父视图
var ParentView = fish.View.extend({
    el: '#app',
    template: fish.compile(template),
    serialize: {
        title: 'i am parent',
        body: 'this is a body'// 这里如果带上html标签不需要转义
    }
});
// 父视图渲染
var parentView = new ParentView().render();

    然后是段落赋值

fish.View.configure({ manage: true, syncRender: true });
// 定义一个模板
//等效于  Shown.
// {{#if person}}
//   Never shown!
// {{/if}}
var template = 'Shown.\n' +
    '{{#person}}\n' +
    '  Never shown!\n' +
    '{{/person}}\n'
// 定义一个父视图
var ParentView = fish.View.extend({
    el: '#app',
    template: fish.compile(template),
    serialize: {
        person: false
    }
});
// 父视图渲染
var parentView = new ParentView().render();

然后是函数赋值

fish.View.configure({ manage: true, syncRender: true });
// 定义一个模板
//
var template = '{{#data}}{{../fn this}}{{/data}}\n' // 参数就是跟在/fn后面的值
// 定义一个父视图
var ParentView = fish.View.extend({
    el: '#app',
    template: fish.compile(template),
    serialize: {
        fn: function(name) {
            return new Handlebars.SafeString('<p>' + name + '</p>'); // 这里使用这个返回Handlebars便不会转义参数
        },
        data: ['huang', 'xing', 'hui']
    }
});
// 父视图渲染
var parentView = new ParentView().render();

属性路径赋值

fish.View.configure({ manage: true, syncRender: true });
// 定义一个模板
//
var template = '<div class="entry">\n' +
    '  <h1>{{title}}</h1>\n' +
    '  <h2>By {{author.name}}</h2>\n' +
    '</div>\n' +
    '<h1>Comments</h1>\n' +
    '\n' +
    '<div id="comments">\n' +
    '  {{#each comments}}\n' +
    '  <h2><a href="/posts/{{../permalink}}#{{id}}">{{title}}</a></h2>\n' +
    '  {{/each}}\n' +
    '</div>' 

// 定义一个父视图
var ParentView = fish.View.extend({
    el: '#app',
    template: fish.compile(template),
    serialize: {
        title: 'Person',
        author: {
            name: 'Lilei'
        },
        permalink: 'http://fish.iwhalecloud.com',
        comments: [
            { id: 1, title: 'fish-desktop' },
            { id: 2, title: 'fish-mobile' },
            { id: 3, title: 'fish-designer' },
            { id: 4, title: 'fish-topo' },
            { id: 5, title: 'fish-cli' }
        ]
    }
});
// 父视图渲染
var parentView = new ParentView().render();

用../可以返回上层获取属性

each循环

fish.View.configure({ manage: true, syncRender: true });
// 定义一个模板
//
var template = '{{#each array}}\n' +
    '  {{@index}}: {{this}}\n' + // @index访问数组索引
    '{{else}}' +
    'nothing' + // 使用else可以处理异常情况
    '{{/each}}\n' +
    '\n' +
    '{{#each object}}\n' +
    '  {{@key}}: {{this}}\n' + // @key访问对象属性
    '{{/each}}\n'

// 定义一个父视图
var ParentView = fish.View.extend({
    el: '#app',
    template: fish.compile(template),
    serialize: {
        object: {
            git: 'git repository url',
            api: 'api url'
        },
        //array: ['fish-desktop', 'fish-mobile', 'fish-designer', 'fish-topo', 'fish-cli']
    }
});
// 父视图渲染
var parentView = new ParentView().render();

递归recursive

fish.View.configure({ manage: true, syncRender: true });
// 定义一个模板
//
var template = '<ul>\n' +
    '  {{#recursive items}}\n' +
    '    <li>{{name}}\n' +
    '      {{#if items}}\n' +
    '        <ul>\n' +
    '          {{{recursive items}}}\n' +
    '        </ul>\n' +
    '      {{/if}}\n' +
    '    </li>\n' +
    '  {{/recursive}}\n' +
    '</ul>\n'

// 定义一个父视图
var ParentView = fish.View.extend({
    el: '#app',
    template: fish.compile(template),
    serialize: {
            items : [
                { name: "foo1" },
                { name: "foo2" },
                { name: "foo3", items: [
                        { name: "foo4" },
                        { name: "foo5" },
                        { name: "foo6", items: [
                                { name: "foo7" }
                            ]}
                    ]},
                { name: "foo8" }
            ]
    }
});
// 父视图渲染
var parentView = new ParentView().render();

条件判断ifcond

fish.View.configure({ manage: true, syncRender: true });
// 定义一个模板
//
var template = '<div class="entry">' +
    "{{#ifCond type '===' 'Y'}}" +
    "<h1>YES</h1>" +
    "{{else}}" +
    "{{#ifCond type '===' 'N'}}" +
    "<h1>NO</h1>" +
    "{{else}}" +
    "<h1>UNKNOWN TYPE</h1>" +
    "{{/ifCond}}" +
    "{{/ifCond}}" +
    "</div>"
        // 定义一个父视图
var ParentView = fish.View.extend({
    el: '#app',
    template: fish.compile(template),
    serialize: {
           type: 'Y'
    }
});
// 父视图渲染
var parentView = new ParentView().render();

注册助手Helpers----动态设置的id一般不会在{{}}中设置太复杂的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值