【问题标题】:Griffon view - can I bind to to array elementGriffon 视图 - 我可以绑定到数组元素吗
【发布时间】:2014-10-30 00:25:22
【问题描述】:

在我的模型中..

@Bindable contentList = ['A','B','C','D','E','F','G','H','J','K','L','M']

在我看来

def offset = 0

2.times { outer ->
  6.times { inner ->
     panel(background: Color.white,
           border: BorderFactory.createLineBorder(Color.black),
           constraints: inner.equals(5) ? 'grow,wrap' : 'grow') {
           label(text: bind {model.contentList[offset++]},
                    font: new Font("Sans Serif",
                    Font.PLAIN, 18))
          }
     }
 }

在初始加载时效果很好,但是当我尝试更新控制器中数组中的元素时 它没有反映在屏幕上.. 有没有办法绑定到数组元素?

谢谢

【问题讨论】:

    标签: view binding griffon


    【解决方案1】:

    您可以为此目的使用ObservableList。例如,在模型中,您可以将contentList 声明为:

    ObservableList contentList = new ObservableList(['A', 'B', 'C', 'D', 'E', 
       'F', 'G', 'H', 'J', 'K', 'L', 'M'])
    

    如果您绑定到ObservableListcontent 属性,您将在更改时收到通知。然后,您可以使用converter 根据某个索引检索正确的值,例如:

    def offset = 0
    def c = { o, v -> v[o] }
    2.times { outer ->
       6.times { inner ->
           label(text: bind('content', source: model.contentList, 
                            converter: c.curry(offset++)))
       }
    }
    

    【讨论】:

    • 作为补充,能否解释一下bind语句('content'字段是从哪里来的)以及curried闭包的使用?
    • contentObservableList (github.com/groovy/groovy-core/blob/master/src/main/groovy/util/…) 的有界属性。我使用 curry 让每个转换器的闭包都记住它们当前的 offset,否则它们将始终使用 offset 的最新值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2010-10-29
    • 2011-07-21
    相关资源
    最近更新 更多