2

ビューを使用しdurandaljsてロードしshell、次に内部ビューをロードしています: page1. shell内部ビュー内から変更可能にしたい内の特定のアイテムをバインドしていますpage1。例:

shell.html

<div class="container">
  <div data-bind="text: someValue"></div>
  <section id="content" class="main container-fluid">
    <!--ko compose: {model: router.activeItem, 
        afterCompose: router.afterCompose,
        transition: 'entrance'} -->
    <!--/ko-->
  </section>
</div>

shell.js

define(['durandal/plugins/router', 'global'],
function (router, global) {
  function activate() {
    global.shellViewModel = shell;
    return router.activate('page1');
  }
  var shell = {
    //...
    someValue: ko.observable('hello world'),
    activate: activate
  };
  return shell;
});

page1.js

define(['durandal/plugins/router', 'global', 'viewmodels/shell'],
function (router, global, shell) {
  function activate() {
    return;
  }
  var page1SomeValue = ko.computed(function() {
    shell.someValue('hello world');
  });
  var vm = {
    //...
    activate: activate,
    somePage1Value: somePage1Value
  };
  return vm;
});

page1ロードされるとglobal.shellViewModel.someValue('hello world');実行されますが、shellビューの値は変更されません。なんで?私は何を間違っていますか?

4

3 に答える 3

0

最初の質問で忘れていたのは、が VM のプロパティsomevalue内に設定されていて、何らかの理由でとビューを更新するときになんらかの衝突を引き起こしていたことです。内部を次のように設定して問題を修正しました:ko.computedpage1page1shellshell.somevalue('hello world');setTimeout

var page1SomeValue : ko.computed(function () {
  setTimeout(function() {
    //shell is required by page1 viewmodel
    shell.someValue('hello world from page 1');
  }, 100);
});
于 2013-05-06T14:27:15.773 に答える
0

http://rainerat.spirit.de/so16363046/#/の作業例

貼り付けたコードと動作中のバージョンに実質的な違いは見られないため、global.js に違いがあると推測しています。

define(function () {
    global = {};


    return global;
});
于 2013-05-04T15:58:04.303 に答える