2016-06-17 2 views
1

간단한 카테고리 및 기사 시스템이 있다고 가정하고 특정 카테고리의 모든 기사 목록을 가져 오는 경로가 있습니다.Falcor에서 전체 범위를 어떻게 무효화합니까?

categoriesById[{integers:ids}].articles[{ranges:rows}]

이제 그 길 먼저 최신으로 기사를 정렬하는 하드 코드 나는 새로운 기사를 추가 할 때, 그래서, 내가 원하기 때문에 (나는 가정) 범주 내에서 모든 기사를 무효화 할 필요가 새소식은 0입니다.

카테고리 내의 전체 기사 범위를 무효화하는 짧은 방법이 있습니까? categoriesById 아래의 모든 article을 명시 적으로 무효화해야합니까, 아니면 항목을 JSONGraph의 목록에 연결하는 방법이 있습니까? ?

답변

2

당신은 range object를 사용할 수 있습니다. 당신이 당신의 call TU 새로 만든 기사 또는 기사의 업데이트 된 수에 대한 자세한 정보를 반환 할 수 있습니다

call(path, arg, refPaths, thisPaths) { 
    // add new article 
    const newLength = // get new length somehow 
    return [ 
     { 
      path: [ 
       "categoriesById", 
       path.categoryId, 
       "articles", 
       {length: newLength} 
      ], 
      invalidated: true 
     } 
    ] 
} 

참고. 여기서는 전체 articles 배열을 클라이언트의 캐시에서 지워야한다는 사실을 반환합니다. 추가 정보를 반환하려면 경로/값 쌍을 반환 된 배열에 추가 할 수 있습니다.

+0

기술적으로는 맞지만 나는 당신의'jsonGraph' 속성을 무시할 수 있고'invalidated : {from : 0, to : newLength} '를 설정할 수 있음을 발견했습니다. –

+0

미안하지만'jsonGraph'가 필요합니다. –

+0

글쎄, 이론적으로 나는'return [{path : [ "users", {length : newLength}, invalidate : true}]'할 수 있어야한다고 생각 하겠지만, 어떤 이유로 든 충돌합니다. –

0

콜렉션의 루트 경로를 invalidate으로 지정할 수 있습니다.

var model = new falcor.Model({ 
    cache: {users: [{name: "Scott"}]} 
}) 

console.log(model.getCache().users) // Object {0: Object, length: Object} 
model.invalidate("users") 
console.log(model.getCache().users) // undefined 

Fiddle

+0

흥미 롭습니다.하지만 내가 뭘했는지는 라우터의 응답이 어떻게 클라이언트 모델에이를 알릴 수 있는지입니다. –

관련 문제