2014-06-21 2 views
1
그래서 두 viewModels을 가지고, 하나는 관찰에서 문서 스타일의 데이터베이스가

:이 thusly 히 적용받을포스 KO 업데이트를 자동으로

var databaseViewModel = function() { 
    var self = this; 
    self.database = ko.observableArray([]).publishesTo("database"); 
} 

var calcViewModel = function() { 
    var self = this; 

    self.replicatedDatabase = ko.observableArray([]).subscribeTo("database"); 
} 

: 유일한 문제는

ko.applyBindings({ 
    databaseViewModel: new databaseViewModel(), 
    calcViewModel: new calcViewModel() 
}); 

의 그 replicatedDatabase에 연결된 드롭 다운 상자에 아무 항목도 표시되지 않습니다. 바인딩 업데이트를 강제로 수행 할 수 있음을 알고 있습니다.

database.valueHasMutated(); 

하지만 어디서 언제 알 수 없습니다.

그러나 ko.applyBindings을 시도했지만 새로 작성한 databaseViewModel에 액세스하는 방법을 잘 모르겠습니다. 나는 그것이 만들어진 후에 databaseViewModel을 시도했지만, KO가 바인드되었을 때 자동으로 바인딩을 업데이트한다고 생각합니다. 실제로 바인딩을 변경했는지는 확실하지 않습니다. 어쨌든 드롭 다운에는 적용되지 않습니다.

내가 여기서 무엇을해야하는지 잘 모르겠다.

참고로, 및 publishesTo 메시지 버스 스타일 통신을 수행하려면 knockout-postbox을 사용하고 있습니다. 따라서 database observable이 변경되면 모든 가입자에게 알리므로 replicatedDatabasedatabaseViewModel이 시작된 인스턴스에서 업데이트되었을 수 있습니다.

+0

KO를 원활하게 사용하는 것은 관측 대상을 업데이트하거나 바인딩하는 것입니다. 이러한 관측치 자체가 별도의 관측 가능 객체 그래프 일 수 있습니다. 그러한 경우 컨테이너 자체가 업데이트되는 곳에서는'with/withBindings'와 같은 것을 사용하여 포함 된 관측 값을 쉽게 바인딩 할 수 있도록 컨테이너를 언 랩핑하십시오. – user2864740

+0

임에도 내 질문에 적용되는 방법, 내 observable 모든 valuess 함께 업데이트됩니다, 따라서 메시지 버스, 업데이트해야합니다 ... 그래서 거기에 다른 해결책이 될 guna가 있습니다 –

+1

'databaseViewModel'입니다 관찰 할 수있는 것이 아니다. 만약 그렇다면, 관찰 할 수있는 것처럼 일관되게 업데이트 될 수 있습니다. 이것이 "새로 생성 된 databaseViewModel에 접근하기"어려운 이유입니다. (실제 문제는 KO가 관찰 할 수있는 *마다 바인딩하기 때문에 오래된 관찰 가능에 바인딩 될 가능성이 높습니다.) – user2864740

답변

0

따라서 강제로 녹아웃을 사용하여 값을 업데이트하는 대신 다른 방법을 선택했습니다.

현실적으로 내가 초기 데이터 들고 전역 변수를 만들어 진행을 염두에두고, 그래서 처음에 서버에서 일부 데이터로 채워 될 페이지를 말하기 :

다음
var serverData = [{}]; 

그냥 단순히 observableArray '을 채울를 데이터베이스 viewModel가 업데이트되는 경우

ko.observableArray.fn.map = function (data, Constructor) { 
    var mapped = ko.utils.arrayMap(data, function (item) { 
     return new Constructor(item); 
    }); 

    this(mapped); 

    return this; 
}; 

모두 viewModel가의 초기 데이터로 시작이 방법, 및이가 오에 투과 : 라이언 Niemeyer의 매핑 기능을 사용하여이야 the viewModel