程序框架介绍之简易双向绑定

网友投稿 44 2024-06-29

简易双向绑定

在 FXML 中,普通的属性的绑定是单向的。例如:

<input value="{{value}}" />
        已复制代码

如果使用 this.setData({ value: 'leaf' }) 来更新 value ,this.data.value 和输入框的中显示的值都会被更新为 leaf ;但如果用户修改了输入框里的值,却不会同时改变 this.data.value 。

如果需要在用户输入的同时改变 this.data.value ,需要借助简易双向绑定机制。此时,可以在对应项目之前加入 model: 前缀:

<input model:value="{{value}}" />
        已复制代码

这样,如果输入框的值被改变了, this.data.value 也会同时改变。同时, FXML 中所有绑定了 value 的位置也会被一同更新, 数据- 也会被正常触发。

在开发者工具中预览效果

用于双向绑定的表达式有如下限制:

<input model:value="值为 {{value}}" /><input model:value="{{ a + b }}" />
        已复制代码

都是非法的;

<input model:value="{{ a.b }}" />
        已复制代码

这样的表达式目前暂不支持。

#5.1 在自定义组件中传递双向绑定

双向绑定同样可以使用在自定义组件上。如下的自定义组件:

// custom-component.jsComponent({
  properties: {
    myValue: String  }})
        已复制代码
<!-- custom-component.FXML --><input model:value="{{myValue}}" />
        已复制代码

这个自定义组件将自身的 myValue 属性双向绑定到了组件内输入框的 value 属性上。这样,如果页面这样使用这个组件:

<custom-component model:my-value="{{pageValue}}" />
        已复制代码

当输入框的值变更时,自定义组件的 myValue 属性会同时变更,这样,页面的 this.data.pageValue 也会同时变更,页面 FXML 中所有绑定了 pageValue 的位置也会被一同更新。

#5.2 在自定义组件中触发双向绑定更新

自定义组件还可以自己触发双向绑定更新,做法就是:使用 setData 设置自身的属性。例如:

// custom-component.jsComponent({
  properties: {
    myValue: String  },
  methods: {
    update: function() {
      // 更新 myValue
      this.setData({
        myValue: 'leaf'
      })
    }
  }})
        已复制代码

如果页面这样使用这个组件:

<custom-component model:my-value="{{pageValue}}" />
        已复制代码

当组件使用 setData 更新 myValue 时,页面的 this.data.pageValue 也会同时变更,页面 FXML 中所有绑定了 pageValue 的位置也会被一同更新。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序框架视图层介绍之FTS 响应事件
下一篇:小程序框架之基础组件开发
相关文章

 发表评论

暂时没有评论,来抢沙发吧~