0

then()ストア レコードを作成して保持した後、promise内で新しいウィンドウを開く方法を見つけるのに苦労しています。

次のコードは、Chrome のポップアップ ブロッカーによってブロックされます。

var obj = this.get('store').createRecord('user', {
  first_name: 'John',
  last_name: 'Smith'
});

obj.save()
  .then(function (user) {
    window.open('http://google.com', '_blank'); // this is blocked by chrome pop-up blocker
  })
  .catch(function (error) {
    this.set('errors', error.errorArray); // display errors in the template
  });

このコードは機能し、ポップアップブロッカーをバイパスしますが、私の問題は、保存中にバックエンドがエラーをスローした場合、最終的にユーザーが正常に作成されなかったため、新しいウィンドウを開きたくないということです。エラーが表示されるメイン ウィンドウに表示されます。エラーが発生した場合はウィンドウを閉じることができますが、ウィンドウをすぐに開いたり閉じたりするちらつきのように見えるため、適切ではありません。

var window_handle = window.open('', '_blank');

var obj = this.get('store').createRecord('user', {
  first_name: 'John',
  last_name: 'Smith'
});

obj.save()
  .then(function (user) {
    window_handle.location.href = 'http://google.com'; // this is NOT blocked by chrome pop-up blocker
  })
  .catch(function (error) {
    this.set('errors', error.errorArray); // display errors in the template
  });

誰かがより良いアイデアを持っていますか?

4

1 に答える 1

0

save戻りますPromise。成功とエラーの機能があります。キャッチの代わりにエラー機能を試すことができます。 http://emberjs.com/api/data/classes/DS.Model.html#method_save

obj.save()
  .then(function (user) {
    var window_handle = window.open('', '_blank'); //if you need window_handle outside then you keep reference outside.
    window_handle.location.href = 'http://google.com'; // this is NOT blocked by chrome pop-up blocker
  },function (error) {
    this.set('errors', error.errorArray); // display errors in the template
  })
  .catch(function (error) {
    this.set('errors', error.errorArray); // display errors in the template
  });
于 2016-10-05T02:02:23.347 に答える