【问题标题】:In JavaScript using both linq.js and knockout.js, how can I generate an observableArray that contains a computed property?在同时使用 linq.js 和 knockout.js 的 JavaScript 中,如何生成包含计算属性的 observableArray?
【发布时间】:2012-09-18 14:00:59
【问题描述】:

对不起,如果我的标题没有意义,但这是我到目前为止所做的:

function createPostsArray(last) {
                var postArr = 
                    generate(
                        function () { 
                            return { 
                                postGroup: [], 
                                visible: computed(
                                            function (){ //return true if 
                                                         //postGroup is empty
                            } 
                        }, last)
                    .toArray();

                posts(postArr);

            }

基本上,postGroup[] 是空的,我想使用 CSS 显示“加载”屏幕。当 postGroup 获取一些元素时,自动可见应该变为 false。

稍后我将扩展这个计算函数以考虑另一个 observable,但这对我来说很棘手,因为 visible 取决于特定的 postGroup,即与之关联的那个。

我该怎么做?有人知道吗?

PS:Generate 是 linq.js 的生成函数,Computed 是 ko.computed 函数

PS:阅读这些概念有什么好的参考资料?

【问题讨论】:

    标签: javascript linq functional-programming knockout.js linq.js


    【解决方案1】:

    淘汰赛部分看起来像这样。 postGroup 需要是一个 observableArray,因为您想观察数组本身。因为 visible 是一个 ko.computed ,所以只要 postGroup 中的元素数量发生变化,它就会运行它的函数。

    extend({ throttle: 100 }) 不是必需的,但如果 postGroup 通过重复的 postGroup.push() 调用填充,它将有助于提高性能。它会导致计算出的 observable 延迟重新评估,直到它的依赖关系在指定的时间段内停止变化。 http://knockoutjs.com/documentation/throttle-extender.html

    return { 
        postGroup: ko.observableArray(), 
        visible: ko.computed(function() {
            return postGroup().length > 0;
        }).extend({ throttle: 100 })
    } 
    

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 2013-04-25
      • 2013-02-14
      • 2014-06-12
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      相关资源
      最近更新 更多