我目前正在开发一种HTML预览器。 我正在开发一种新功能来自动保存最近的修改。
我有一个函数返回一个包含我要保存的数据的对象
import os
import subprocess
base = 'C:\\data'
jupyter_dir = os.path.join(base,'.jupyter')
if not os.path.exists(jupyter_dir):
os.mkdir(jupyter_dir)
dirs = {'JUPYTER_CONFIG_DIR' : jupyter_dir, 'JUPYTER_RUNTIME_DIR' : os.path.join(jupyter_dir,'runtime'),'JUPYTER_DATA_DIR' : os.path.join(jupyter_dir,'data')}
for k,v in dirs.iteritems():
if not os.path.exists(v):
os.mkdir(v)
os.environ[k] = v
ipython_dir = os.path.join(base,'.ipython')
os.environ['IPYTHONDIR'] = ipython_dir
subprocess.call(['C:\\Python27\\Scripts\\jupyter-notebook.exe'])
另一个函数(此处缩短),每隔X秒将此对象保存到另一个对象中。
var saveSkin = function(){
var saveObj = {
"name" : $rootScope.skin.name,
"type": $rootScope.type,
"skin" : {
"name" : $rootScope.skin.name,
"td" : $rootScope.skin.td,
"client" : $rootScope.skin.client,
"aid" : $rootScope.skin.aid
},
"skinSettings" : {
"bgUrl" : $rootScope.skinSettings.bgUrl,
"bgColor" : $rootScope.skinSettings.bgColor,
"bannerHeight" : $rootScope.skinSettings.bannerHeight
},
"components" : $rootScope.components,
"exportCss" : $rootScope.exportCss,
"exportJs" : $rootScope.exportJs
};
return saveObj;
};
问题是父对象内的所有对象都具有相同的值,比如每个对象是否使用rootScope值自动更新,而我希望它们保留rootScope的创建时刻。
如果您对如何解决这个问题有任何想法,我将非常感激。 谢谢,阿德里安
答案 0 :(得分:1)
您的对象在不调用saveSkin()
的情况下更改,可能是因为您在那里使用的所有属性都不是value type
,其中一些属性是指向对象的指针。
所以,就我所见,你有两个选择:
1)仅保存saveObj
2)每次更新时都克隆对象,最简单的方法是(效率不高)
$scope.savedObject = JSON.parse(JSON.stringify(saveObj));
答案 1 :(得分:0)
也许你可以尝试这样的事情:
var saveSkin = function (skin, type, skinSettings, components, exportCss, exportJs) {
return {
"name": skin.name,
"type": type,
"skin": {
"name": skin.name,
"td": skin.td,
"client": skin.client,
"aid": skin.aid
},
"skinSettings": {
"bgUrl": skinSettings.bgUrl,
"bgColor": skinSettings.bgColor,
"bannerHeight": skinSettings.bannerHeight
},
"components": components,
"exportCss": exportCss,
"exportJs": exportJs
};
};
而不是这样称呼:
var autoSave = function () {
$interval(function () {
creativeSave.push(saveSkin($rootScope.skin, $rootScope.type, $rootScope.skinSettings, $rootScope.components, $rootScope.exportCss, $rootScope.exportJs));
}, 3000);
};
也许那时甚至可以将$rootScope
更改为$scope
答案 2 :(得分:0)
我不完全明白你想要什么,但是,这可能会对你有所帮助。这里当我们使用$ rootScope。$ watch这样会在每次rootScope更改时执行。
$rootScope.$watch(function(data){
creativeSave.push(saveSkin());
});