我有一个关于如何根据我传递的参数使观察者的方法静音的问题。我有一个参数link_social
,如果它设置为 false,我希望观察者不触发该created()
函数。
$role = $request->role == 'creator' ? 'creator' : 'sponsor';
if($request->link_social == true){
$user = Auth::user()->$role()->create([
'name' => $request->safe()->name,
'about' => $request->safe()->about,
'account_plan_id' => $accountPlan->id,
]);
} else{
$user = Auth::user()->$role()->create([
'name' => $request->safe()->name,
'about' => $request->safe()->about,
'account_plan_id' => $accountPlan->id,
])->saveQuietly();
}
Run Code Online (Sandbox Code Playgroud)
该User
模型有一个关系方法creator
,观察者来自该模型,名为CreatorObserver
但我得到了这个
"message": "Call to undefined method App\\Models\\Creator::saveQuitely()"
保存(编辑)时出错,但仍然会触发created()
创建者观察者中的事件,该观察者正在将记录保存在另一个表中。
我正在尝试做类似的事情$user->role->create()->saveQuitely()
创造者观察者
class CreatorObserver
{
/**
* Handle the Creator "created" event.
*
* @param \App\Models\Creator …
Run Code Online (Sandbox Code Playgroud) 当我尝试为checkout_type_onepage_save_order
下面的事件编写观察者时
<events>
<checkout_type_onepage_save_order>
<observers>
<Appeal_Consignor_Model_Observer>
<type>singleton</type>
<class>consignor/observer</class>
<method>savedata</method>
</Appeal_Consignor_Model_Observer>
</observers>
</checkout_type_onepage_save_order>
</events>
Run Code Online (Sandbox Code Playgroud)
以上代码我试过frontend
以及global
.
即使我也试过跟随.
<events>
<checkout_type_onepage_save_order>
<observers>
<Appeal_Consignor_Model_Observer>
<type>singleton</type>
<class>Appeal_Consignor_Model_Observer</class>
<method>savedata</method>
</Appeal_Consignor_Model_Observer>
</observers>
</checkout_type_onepage_save_order>
</events>
Run Code Online (Sandbox Code Playgroud)
完整的config.xml文件如下
<?xml version="1.0"?>
<config>
<modules>
<Appeal_Consignor>
<version>1.0.1</version>
</Appeal_Consignor>
</modules>
<global>
<models>
<consignor>
<class>Appeal_Consignor_Model</class>
</consignor>
</models>
<resources>
<consignor_setup>
<setup>
<module>Appeal_Consignor</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</consignor_setup>
<consignor_write>
<connection>
<use>core_write</use>
</connection>
</consignor_write>
<consignor_read>
<connection>
<use>core_read</use>
</connection>
</consignor_read>
</resources>
<helpers>
<consignor>
<class>Appeal_Consignor_Helper</class>
</consignor>
</helpers>
</global>
<frontend>
<routers>
<consignor>
<use>standard</use>
<args>
<module>Appeal_Consignor</module>
<frontName>consignor</frontName>
</args> …
Run Code Online (Sandbox Code Playgroud) 如何在添加到购物车Magento时更改产品价格,示例:
假设我正在尝试添加1个价格10美元的产品,我想用10美元*5 = 50美元显示价格,当我添加2个产品时,我想要显示10美元*10 = 100美元.所以它的公共乘数是5.(x的倍数).
新的余烬规则规定我们需要使用以下模式
propObserver: Ember.observer(function () {
//code
})
Run Code Online (Sandbox Code Playgroud)
代替
propObserver: function() {
//code
}.observers('someProp')
Run Code Online (Sandbox Code Playgroud)
在更新ember之前,我们可以执行以下操作
propObserver: function () {
//code
}.observes('someProp').on('init')
Run Code Online (Sandbox Code Playgroud)
如何实现这种级联?
现在我知道我们可以单独做到这一点
propObserver: Ember.observer('someProp', function () {
//code
})
propObserver: Ember.on('init', function () {
//code
})
Run Code Online (Sandbox Code Playgroud) 我在尝试让我的模型观察器工作时遇到麻烦。它正在按预期的方式进行创建和删除,但无法进行更新。我猜事件永远不会触发。问题是所有事情都以完全相同的方式进行。有任何想法吗?下面,我的观察者。
class GenericObserver extends AbstractObserver {
protected $events;
public function __construct(Dispatcher $dispatcher){
$this->events = $dispatcher;
}
public function saved($model) {
dd($this->events);
$user_id = Auth::user()->usr_id;
$user_nome = Auth::user()->usr_nome;
$user_email = Auth::user()->usr_email;
dd($model);
}
public function deleted($model) {
$user_id = Auth::user()->usr_id;
$user_nome = Auth::user()->usr_nome;
$user_email = Auth::user()->usr_email;
echo($model->getTable());
dd($model->getKeyName());
}
public function updated($model) {
$user_id = Auth::user()->usr_id;
$user_nome = Auth::user()->usr_nome;
$user_email = Auth::user()->usr_email;
dd($model);
}
public function saving($model){
echo 'Saving';
}
public function deleting($model){
echo 'Deleting';
}
public function updating($model){
echo 'Updating'; …
Run Code Online (Sandbox Code Playgroud) 最终,我想从这个geochart中选择个别状态.但是这个问题仅限于让观察者被标记_computeData
为响应于改变selected
状态数组而被激活.
通过以下步骤重现问题:
请注意控制台显示:
您选择了:科罗拉多州,南达科他州,德克萨斯州
这是预期的这条线:
console.log('You selected: ' + this.selected); // Logs properly
Run Code Online (Sandbox Code Playgroud)
但是,我希望控制台也能读到:
选
按此行:
_computeData: function() {
console.log('selected'); // Does not log properly; function not called?
...
Run Code Online (Sandbox Code Playgroud)
应该由以下一组观察员调用.
http://jsbin.com/wuqugigeha/1/edit?html,console,output...
observers: [
'_computeData(items.*, selected.*)',
'_dataChanged(data.*)',
],
...
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?观察者为什么不调用该_computeData
方法?在改变selected
数组之后可以做些什么来使方法触发?
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<base href="https://polygit.org/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link href="polymer/polymer.html" rel="import">
<link href="google-chart/google-chart.html" rel="import"> </head>
<body>
<dom-module id="x-element"> <template>
<style>
google-chart …
Run Code Online (Sandbox Code Playgroud) 我们已经知道如何从观察者重定向到 magento 1.x版本。
但是对于magento 2,我们不知道如何从观察者那里强制执行重定向。
我已经完成了google,但没有得到任何答案。
我创建了与之相关的News
模型NewsObserver
.我想对传递给updated
/ on updating
事件的模型传递新旧数据做一些逻辑,但传递模型的转储与原始属性具有相同的属性,除了'updated_at'
字段.我究竟做错了什么?
public function updating(News $item)
{
dd($item);
}
Run Code Online (Sandbox Code Playgroud)
这是观察者所附的地方
use App\Observers\NewsObserver;
use App\Observers\FileObserver;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
News::observe(NewsObserver::class);
File::observe(FileObserver::class);
}
Run Code Online (Sandbox Code Playgroud)
这是我NewsObserver
参加updating
活动的一部分.dd
中$item
只包含旧数据
namespace App\Observers;
use App\News;
class NewsObserver
{
/**
* Listen to the News updated event.
*
* @param \App\News $item
* @return void
*/ …
Run Code Online (Sandbox Code Playgroud) 我希望我的应用程序在另一天发生变化时起作用。
所以,在我的 appDelegate 中,我把
func applicationSignificantTimeChange(_ application: UIApplication){
//this one fires
}
Run Code Online (Sandbox Code Playgroud)
在应该更新其内容的 ViewController 中,我会这样做:
override func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(self.dayChanged(notification:)), name: Notification.Name("significantTimeChangeNotification"), object: nil)
}
Run Code Online (Sandbox Code Playgroud)
和
@objc func dayChanged(notification: NSNotification){
//this one doesn't fire
}
Run Code Online (Sandbox Code Playgroud)
不知何故,当 AppDelegate 中的 func 被调用时,观察者似乎对该事件视而不见。
这是语法,还是只是对机制的简单误解?
我正在构建一个过滤器,您可以在其中按类别过滤,您可以通过单击类别名称旁边的复选框来选择一个类别。
所以我有一个filterComponent
,它包含它自己的过滤器,然后是一个filterService
,它有一个类别属性Subject<Array<ICategory>>
,这个属性用于将数据传递到productsComponent
我订阅类别属性的位置。
当我想使用此模式传递一个简单的字符串时,此逻辑有效,但当我想传递对象数组时,它似乎不起作用。
在我的 filters.component.html 文件中,当复选框值发生变化时,我正在调用一个方法:
<li *ngFor="let category of categories">
<mat-checkbox (change)="addOrRemoveCategory(category)" [(ngModel)]="category.isChecked">
{{'category.' + category.Name | translate}}
</mat-checkbox>
</li>
Run Code Online (Sandbox Code Playgroud)
addOrRemoveCategory 方法实现如下所示:
private addOrRemoveCategory(category: ICategory): void {
if (!this.chosenCategories.includes(category)) {
this.add(category);
} else {
this.remove(category);
}
this.filterService.categories.next(this.chosenCategories);
}
Run Code Online (Sandbox Code Playgroud)
所以无论一个类别发生了什么,被添加或删除,(我在内部修改了selectedCategories数组,我用它的值调用 .next() ),我用更新的数组调用 .next() 。
问题是,当selectedCategories数组为空时,我推送到它,并用它调用 .next() 时,我正确地获取了订阅者函数中的值,但是如果再次执行此操作,并且我有一个2 个元素数组,我调用 .next(this.chosenCategories),我的订阅者方法没有收到通知。
但是,一旦我使用空数组调用 .next() ,我的订阅者方法就会再次收到通知(因为我已经删除了之前选择的所有类别)。
订阅者方法:
this.categoriesChangeSubscription = this.filterService.categories
.pipe(
debounceTime(500),
distinctUntilChanged()
)
.subscribe((categories: Array<ICategory>) => { …
Run Code Online (Sandbox Code Playgroud) RXJS 中的观察者和订阅者有什么区别?
请参阅下面的代码
// subscriber being used
const observable = new Observable(subscriber => {
subscriber.next(1);
subscriber.next(2);
})
// observer being used
const observable = new Observable(observer => {
observer.next(1);
observer.next(2);
})
Run Code Online (Sandbox Code Playgroud)
在上面的上下文中观察者和订阅者有什么区别?