如何刷新DevExtreme菜单上的数据源

时间:2017-01-16 03:08:54

标签: angularjs devextreme

我正在使用angular-translate代替i18n。有点不幸的是,$ translate服务异步加载字符串。

我已经复制了相关的控制器代码。在加载翻译后,用新的项目数组替换当前数据源项目的最佳方法是什么? (或在用户签到此案例后)。代码看起来有点笨拙。

请参阅下面的我的尝试。

var items = [
  {
    text: 'This option remains',
    uiState: 'signin',
    icon: 'user'
  }];

$scope.accountMenuDS = new DevExpress.data.DataSource({
  store: {
    type: "array",
    key: "text",
    data: items
  }
});

$translate(['users.signin']).then(function (trans) {
  if (!user) {

    var newItems = [
      {
        text: 'hello',
        uiState: 'signin',
        icon: 'key'
      }
    ];

    Array.prototype.splice.apply(items, [0, newItems.length].concat(newItems)); // is there a better way than this?

    $scope.accountMenuDS.reload();

  } else {
    // handle signed in case later
  }
});

1 个答案:

答案 0 :(得分:1)

在您的情况下,您可以使用bindingOptions字段提供双向绑定:

<div ng-controller="myCtrl">
    <div dx-menu="menuOptions"></div>
    <div dx-button="buttonOptions"></div>
</div>

控制器代码:

myApp.controller("myCtrl", function($scope) {
    $scope.menuData = [/*...*/];

    $scope.menuOptions = {
        bindingOptions: {
            dataSource: "menuData"
        }
    };

    $scope.buttonOptions = {
        text: "Update data",
        onClick: function() {
            $scope.menuData.push({
                text: "Item 3"
            });
        }
    };
});

同样见plunker demo