如何获得Knockout中可观察到的长度?

时间:2018-09-24 11:38:48

标签: knockout.js magento2

我在淘汰赛中有一个可观察的sizeDetails,我需要在淘汰赛模板中获取长度。我的观察结果如下

sizeDetails: ko.observable()

在Ajax通话成功后,我将可观察性设置如下

  self.sizeDetails({sizeGuideDetails: sizeGuideDetails,
                    shopBySizeDetails: shopBySizeDetails
                  });

如何在剔除模板中分别获取sizeGuideDetails和shopBySizeDetails长度

3 个答案:

答案 0 :(得分:0)

由于键本身是对象,因此我们必须像this那样获得它们的长度。

一般来说,这比淘汰赛更重要。为了获得可观察到的淘汰赛的价值,您可以像调用函数一样调用它。例如:sizeDetails()。在这种情况下,它将返回对象,然后我们可以获取单个大小并将其以数组或适合您的任何格式返回。

function getSizeDetails(){
    const sizeDetailsObject = self.sizeDetails();
    let sizes = [];
    for (var key in sizeDetailsObject) {
        //check if key exists
        if (sizeDetailsObject.hasOwnProperty(key)) {
            //since key is sure to be an object, get its length like this:
            sizes.push(Object.keys(sizeDetailsObject[key]).length);
        }
    }
    return sizes;
};

您还可以创建一个pure Computed observable,其值会在sizeDetails更新时自动更新。

self.sizes = ko.pureComputed(function(){
    const sizeDetailsObject = self.sizeDetails();
    let sizes = [];
    for (var key in sizeDetailsObject) {
        if (sizeDetailsObject.hasOwnProperty(key)) {
            sizes.push(Object.keys(sizeDetailsObject[key]).length);
        }
    }
    return sizes;
}, self);

现在,您始终可以通过致电self.sizes()获得最新的尺寸。


要单独获取尺寸,您可以按照Erick和Bivo在回答中提到的方式进行。

答案 1 :(得分:0)

尝试

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:fillViewport="true"
    android:orientation="vertical">


    <android.support.constraint.ConstraintLayout
        android:orientation="vertical"
        android:background="@color/sos"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <Button
            android:id="@+id/mybtn1"
            android:text="1"
            android:layout_width="match_parent"
            app:layout_constraintHeight_percent="0.99"
            android:layout_height="0dp" />

        <Button
            app:layout_constraintTop_toBottomOf="@+id/mybtn1"
            android:text="2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />


    </android.support.constraint.ConstraintLayout>



</ScrollView>

答案 2 :(得分:0)

sizeDetails().sizeGuideDetails.lengthsizeDetails().sizeGuideDetails().length取决于sizeGuideDetails是否可观察。与shopBySizeDetails相同。

您可以在html中喜欢的任何地方使用它,例如:

<span data-bind="text: sizeDetails().sizeGuideDetails().length">

或没有任何html标记:

<!-- ko if: sizeDetails().sizeGuideDetails().length > 0 -->

如果条件为true的一些html

<!-- /ko -->