属性与值绑定

1. 属性动态绑定

b-bind 绑定支持2种数据格式. 并且通过 bs.title="XXX" 或者 bs.attrs.title="xxx" 可以触发属性的修改. 绑定的字段在 data 里面

  • Object : 键值为样式名,值为布尔值
  • String : 值为样式名
  1. var bs = bui.store({
  2. scope: "page",
  3. data: {
  4. title: "这是动态标题",
  5. attrs: {
  6. "title": "这是动态标题",
  7. "data-title": "自定义标题",
  8. }
  9. }
  10. })

html:

  1. <!-- 绑定多个 -->
  2. <p b-bind="page.attrs">绑定title属性,及自定义属性</p>
  3. <!-- 绑定1个 -->
  4. <p b-bind="page.title">绑定title属性</p>

效果预览

查看效果

2. 值的动态绑定

有三种值的设置, 推荐 b 标签作为默认的双向绑定标签. 如果内容元素是块状, 可使用 div 标签.

  • b-text : 设置文本
  • b-html : 设置html
  • b-value : 设置属性value,一般用于表单
  1. var bs = bui.store({
  2. scope: "page",
  3. data: {
  4. value: "Hello bui.js",
  5. attrs: {
  6. title: "这是动态标题",
  7. },
  8. title: "<h1>html标题</h1>",
  9. }
  10. })
  1. <!-- 1.设置文本,支持对象 -->
  2. <b b-text="page.attrs.title"></b>
  3. <!-- 2.设置Html -->
  4. <div b-html="page.title"></div>
  5. <!-- 3.设置value -->
  6. <input b-value="page.value" class="bui-input"/>

效果预览

查看效果

3. 静态解析

静态解析{{}}里面的值. 默认没有开启, 如果需要, 初始化时设置 needStatic: true 才会解析. templates定义的模板方法里面不要使用{{}} 或者 b-开头的模板命令.

  • 不支持表达式
  • 不支持动态修改
  • 只在第一次渲染解析
  1. var bs = bui.store({
  2. scope: "page",
  3. data: {
  4. title: "这是动态标题2",
  5. attrs: {
  6. "title": "这是动态标题",
  7. "data-title": "自定义标题",
  8. }
  9. },
  10. needStatic: true,
  11. })

html:

  1. <div title="{{page.attrs.title}}">{{page.title}}</div>

值得注意的是, 如果你的数据是公共数据, isPublic:true 时, needStatic不能为true,会干扰到路由, 那如何解析公共数据的{{}}值呢?

  1. window.router = bui.router();
  2. bui.ready(function() {
  3. // 公共数据
  4. window.store = bui.store({
  5. scope: "app",
  6. isPublic: true,
  7. data: {
  8. firstName: "Hello",
  9. lastName: "BUI"
  10. }
  11. })
  12. // 初始化路由
  13. router.init({
  14. id: "#bui-router",
  15. progress: true,
  16. hash: true,
  17. store: store,
  18. })
  19. })

store挂载到路由, 就可以解析公共数据的 {{app.firstName}} 之类的数据, 在模块里面,你也可以使用 store.firstName 读取跟修改公共数据的值, 会在全局起作用, 比方商城的加入购物车.

注意, 如果是异步加载,比方TAB的动态加载,你想要解析这个 store 里面的模板的话, 需要在tab这个模块里面执行一次.

tab-setting.html

  1. <div b-text="app.firstName"></div>

tab-setting.js

  1. loader.define(function(){
  2. // tab-xxx 为当前tab的样式或id名称.
  3. store.compile(".tab-setting");
  4. })