0

我对 AngularJS 相当陌生,并且真的很难重新绑定 Wijmo 树(甚至是使用 ng-repeat 的 UL 和 LI 元素实现的树)与关于改变 Wijmo 组合框值的新数据(或者,甚至是常规HTML 选择元素的下拉菜单)。以下是我编写的代码,在初始页面加载时运行良好。但是在更改下拉列表时,不会使用 loadDomainTree 方法获取的新数据重新加载树;它仍然显示旧数据。有人可以帮我弄清楚这段代码有什么问题吗?

HTML:

<div ng-controller="DomainCtrl">
    <select id="domain" ng-model="currentDomain" ng-options="item.Name for item in domainList"></select>
    <div>
        <ul id="wijtree">
            <li ng-repeat="item in domainEntityList" id={{item.Id}}>
                <a>{{item.Name}}</a>
            </li> 
        </ul>
    </div>                                                      
</div> 

JS:

$(document).ready(function ()
{
    $("#domain").wijcombobox({
        isEditable: false
    });

    $("#wijtree").wijtree();
});

function DomainDropdownModel(data) {
    this.Id = data.Id.toString();
    this.Name = data.Name;
};

function DomainTreeModel(data) {
    this.Id = data.Id;
    this.Name = data.Name;
};

function DomainCtrl($scope, $locale) {
    $scope.domainList = [];

    $.ajax({
        url: dropDownUrl,
        async: false,
        success: function (data) {
            $(data).each(function (i, val) {
                var domain = data[i];
                var domainId = domain.Id.toString();
                var domainName = domain.Name;
                $scope.domainList.push(new DomainDropdownModel({ Id: domainId, Name:  domainName }));
            });
        }
    });

    $scope.currentDomain = $scope.domainList[0];

    $scope.loadDomainTree = function (domainId) {
    domainEntitiesUrl = DOMAIN_API_URL + DOMAIN_ID_PARAM + domainId;
    //alert(domainEntitiesUrl);
    $scope.domainEntityList = [];
    $.ajax({
        url: domainEntitiesUrl,
        async: false,
        success: function (data) {
            $(data).each(function (i, entity) {
                var domainEntity = data[i];
                var domainEntityId = domainEntity.Id.toString();
                var domainEntityName = domainEntity.Name;
                $scope.domainEntityList.push(new DomainTreeModel({ Id: domainEntityId, Name: domainEntityName }));
                });
            }

        });
    };

    //Will be called on setting combobox dfault selection and on changing the combobox
    $scope.$watch('currentDomain', function () {
        $scope.loadDomainTree($scope.currentDomain.Id);
    });
}
4

1 回答 1

0

您可以 $watch 来查看 WijCombobox 的 selectedItem,然后相应地重新加载 wijtree。这是代码:

$scope.$watch('selectedItem', function (args) {
        if (args === 'Tree 1') {
                $("#wijtree").wijtree("option", "nodes", $scope.nodes1);
            }
            else {
                $("#wijtree").wijtree("option", "nodes", $scope.nodes2);
            }
   });

HTML 代码

<wij-combobox data-source="treeList" selected-value="selectedItem">
            <data>
                <label bind="name"></label>
                <value bind="code"></value>
            </data>
 </wij-combobox>
于 2013-09-24T06:35:20.453 回答