2017-02-10 4 views
1

Существует эта платформа для электронной коммерции, в которой используется много аякс. В разделе заказа backoffice есть две возможности: страница списка заказов и подробная страница заказа. URL-адрес не изменяется, было бы легко, если бы он сказал, на какой странице я нахожусь, но это не так.Прослушивание переменных изменений во внешнем файле JavaScript

Эта платформа использует ajax для присвоения переменной некоторого значения, с этим значением, которое я могу рассказать в своем коде, на странице которого я могу лучше всего использовать setInterval(), чтобы получить изменение этой переменной. Я ненавижу использование setInterval(), поэтому я рассматриваю альтернативы.

Почему я ненавижу это? Представьте клиента, который использует нашу «помощь» в этой электронной коммерции и оставит его открытым весь день. setInterval() является ненавистным в таких ситуациях.

Дело в том, что у меня нет никакого контроля в этом внешнем javascript, который запускается платформой, поэтому мне нужен способ использовать какой-то слушатель для этой переменной.

Лучшее, что я могу найти, это Akira's answer, но я не могу использовать его, потому что эта переменная не в моем распоряжении для определения.

Это то, что я сделал:

setInterval(function() {//get the variable from the source code of the platform; it changed? do stuff}, 1000); 

Вы знаете лучший способ сделать это, чем setInterval()? Просто чтобы улучшить мой код. Thx

Edit: эта переменная в скрипте, а не в HTML-элемент

Edit 2:this link несколько лучший способ, чем setInterval(), в основном улучшенной setInterval(), потому что вы может сказать ему, сколько итераций делать, и это нормально в том случае, если клиент покидает платформу весь день, но для ее использования мне нужно что-то, чтобы обнаружить, что клиент сделал некоторые действия на странице, что мне нужно для этого ? слушатель soooo, назад к квадрату

ответ

0

SuperNovas's answer edited by alex это одна вещь, которую мы можем работать на обнаружение активности на нашей странице и установить время на setInterval(). Не самый чистый из ответов, чтобы придумать, но это что-то, я отмечаю поток как разрешенный, пока кто-то не даст лучший ответ. Спасибо.

0

Вы можете попробовать использовать Vue.js framework для этого. Я создал jsfiddle с образцом кода. Итак, идея, что Vue.js framework автоматически проверяет и обновляет переменные. НО, он должен добавить код для этого в ваших «платформенных» объектах. Таким образом, это может сработать или сломать некоторые функции. В любом случае вы можете попробовать becouse все, что вам нужно сделать, это написать несколько строк кода :-)

window.someObjectOfThePlatform = { 
     variable1:"Test", 
     updateVariable1:function(){ 
     this.variable1 = "New val " + Math.random(10);  
     } 
    }; 

    Vue.component('your-component', { 
     template:"<div>{{ variable1 }}</div>", 
     data:function(){ 
     /* all magic is here. The Vue framework automaticaly add 
      methods to look at variables and update values 
     */ 
     return window.someObjectOfThePlatform 
     }, 
     watch: { 
     // whenever variable1 changes, this function will run 
     variable1: function (newValue) { 
      console.log("variable1 updated"); 
     } 
    } 
    }); 

    var app = new Vue({ 
     el: '#app' 
    }); 
+0

извините, но мы не можем использовать Vue.js в нашем приложении, просто Javascript. – iscato

+0

Дело в том, что мы не можем получить доступ к коду этого внешнего javascript, и нам нужно обработать некоторую информацию в зависимости от значения этой переменной, я повторяю переменную javascript, а не элемент в DOM – iscato