librelist archives

« back to archive

关于全局渲染参量的设计

关于全局渲染参量的设计

From:
Tang Daogang
Date:
2011-11-28 @ 10:53
这个想了一下,在bamboo中其实非常好办,就用一个bamboo这个名字空间下的全局变量context。

先说一下用法:

   1. 在要用到全局渲染参量的地方,写bamboo.context = { A = xx, B = xx, C = xx },或
   bamboo.context['A'] = xx ...;
   2. 然后,就可以在模板文件中直接使用这里面的A, B, C变量了;

是不是很简洁?!

具体实现如下:

1. 在init.lua中,添加一行

context = {}


2. 修改view.lua文件中的第375行开始的代码如下:

        return function(context)
            assert(context, "You must always pass in a table for context.")
            local _context = {}
            table.copy(_context, bamboo.context)
            context = table.update(_context, context)
            setmetatable(context, {__index=_G})
            setfenv(func, context)
            return func()
        end
3. 没了。太简单了。


-- 
Nothing is impossible.

Re: [bamboo] 关于全局渲染参量的设计

From:
道哥
Date:
2011-11-29 @ 02:53
将这3行:
            local _context = {}
            table.copy(_context, bamboo.context)
            context = table.update(_context, context)
改为:
context = table.update(bamboo.context, context)
更好。

这样的话,看起来好像是bamboo.context中会不断被污染,但这也提供了一种取巧的方法,一般情况下是没有影响的。还是那句话,只用自己要用的,不管多余的东西。


--
Nothing is impossible.


在 2011-11-28 18:53:13,"Tang Daogang" <daogangtang@gmail.com> 写道:
这个想了一下,在bamboo中其实非常好办,就用一个bamboo这个名字空间下的全局变量context。

先说一下用法:

在要用到全局渲染参量的地方,写bamboo.context = { A = xx, B = xx, C = xx },或 
bamboo.context['A'] = xx ...;
然后,就可以在模板文件中直接使用这里面的A, B, C变量了;

是不是很简洁?!

具体实现如下:

1. 在init.lua中,添加一行

context = {}





2. 修改view.lua文件中的第375行开始的代码如下:

        return function(context)
            assert(context, "You must always pass in a table for context.")
            local _context = {}
            table.copy(_context, bamboo.context)
            context = table.update(_context, context)
            setmetatable(context, {__index=_G})
            setfenv(func, context)
            return func()
        end


3. 没了。太简单了。


--
Nothing is impossible.