durandal撰写 - 如何将数据传入和传出子视图模型?

时间:2014-02-14 17:38:42

标签: durandal

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

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

例如我在我的孩子模型中做了类似的事情:

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>

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

1 个答案:

答案 0 :(得分:1)

您可以自己实例化您的子视图模型(在JS代码中,而不是让撰写处理程序执行此操作)然后将其分配给父视图模型的属性,您可以依次编写它。

function Parent() {
    this.child = new Child;
}
return Parent;

...

<!-- ko compose: child --> ...

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

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