【问题标题】:durandal compose - how to pass data in and out of child viewmodel?durandal compose - 如何将数据传入和传出子视图模型?
【发布时间】:2014-02-15 02:39:23
【问题描述】:

有人知道从子视图模型传回数据的正确方法吗?

我的子视图模型执行和操作,然后需要触发父模型中的事物刷新。

例如,我在我的子模型中做这样的事情:

vm.activate = function (params) {
        vm.TaskTypeId = params.TaskTypeId;
        vm.Sections = params.Sections;
        vm.FieldId = params.FieldId;
        vm.Dimensions = params.Dimensions;

这样称呼它

<div data-bind="sortable: {data: Fields,beforeMove:$root.preOrder,afterMove:$root.saveOrder}">
                        <div class="item"><a data-bind="text:Name,click:function() {$root.edit(Id());}" style="margin-left:20px;"></a>
                            <!-- ko if: $root.selectedFieldId()==Id() -->
                            <!-- ko compose:{model:'tasktype/edittasktype/addedittasktype',activationData:{TaskTypeId:$root.TaskTypeId, Sections:$root.Sections,FieldId:$root.selectedFieldId,Dimensions:$root.Dimensions } } --><!-- /ko -->
                            <!-- /ko -->
                        </div>
                    </div>

这似乎可行,但我想知道是否有更好的方法?

【问题讨论】:

    标签: durandal


    【解决方案1】:

    您可以自己实例化您的子视图模型(在 JS 代码中,而不是让 compose 处理程序来做),然后将其分配给您的父视图模型的一个属性,您可以依次进行组合。

    function Parent() {
        this.child = new Child;
    }
    return Parent;
    
    ...
    
    <!-- ko compose: child --> ...
    

    然后,您可以使用 child 属性从父级访问所有子级属性。

    如果您需要从子视图模型访问父属性,您可以在子视图模型的构造函数中传递对父属性的引用(这可能是一个好主意,也可能不是一个好主意,具体取决于您希望它们的耦合程度)。

    【讨论】:

    • 这很有帮助,但我在问如何从孩子访问父母。那么,如果两个模块都是单例,我可以在子模型中使用相同的方法来访问父模型吗?或者如果有两个相互引用绑定到页面的单例模型,淘汰赛会做奇怪的事情吗?谢谢
    • 如果他们是单身人士,那就更简单了;只是 require() 孩子的父母和.. 好了,你有它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多